Глава 4. Циклические алгоритмы,
их реализация в С++
Циклические алгоритмы
Циклом в программировании называют повторение одних и тех же действий (шагов). Последовательность действий, которые повторяются в цикле, называют телом цикла.
Цикл с предусловием
Цикл с постусловием
Безусловный циклический алгоритм
Задача 4.1. Составить таблицу значений функции y=2esin(3x)cos(4x) на отрезке [xn; xk] с шагом dx. Найти сумму положительных y и произведение отрицательных y.
Оператор цикла for
Оператор for имеет следующий вид:
For(начальные_присваивания ; условие; приращение)
оператор;
For(начальные_присваивания ; условие; приращение)
{
оператор 1;
оператор 2;
…
оператор n;
}
for(i=in; i<=ik; i=i+di)
оператор ;
for(i=in; i<=ik; i+=di)
оператор;
Оператор while
while (условие) оператор;
While условие
{
оператор 1;
оператор 2;
…
оператор n;
}
Оператор do-while
Цикл с постусловием реализован в виде оператора do-while. Структура этого оператора следующая:
do
{
оператор;
} while (условие);
Операторы break, continue
Оператор break осуществляет немедленный выход из циклов while, do-while и for. Его можно использовать только внутри циклов.
Оператор continue начинает новую итерацию цикла, даже если предыдущая не была завершена. Его можно использовать только внутри цикла.
Решение задач с использованием циклов
Составить таблицу значений функции y=2esin(3x)cos(4x) на отрезке [xn;xk] с шагом dx. Найти сумму положительных y и произведение отрицательных y.
|
|
Текст программы с использованием оператора while (в стиле Паскаля)
#include <stdio.h>
#include <math.h>
int main()
{
float xn, xk, dx, x, y, s, p;
printf("Введите xn,xk,dx");
scanf("%f%f%f",&xn,&xk,&dx);
s=0;p=1;x=xn;
while(x<=xk)
{
y=2*exp(sin(3*x))*cos(4*x);
printf("X=%g\tY=%g\n",x,y);
if (y>=0) s+=y;
else p*=y;
x+=dx;
}
printf("S=%g\tP=%g\n",s,p);
}
Текст программы с использованием for (в стиле С).
#include <stdio.h>
#include <math.h>
int main()
{
float xn, xk, dx, x, y, s, p;
printf("Введите xn,xk,dx");
scanf("%f%f%f",&xn,&xk,&dx);
for(s=0,p=1,x=xn;x<=xk;x+=dx)
{
y=2*exp(sin(3*x))*cos(4*x);
printf("X=%g\tY=%g\n",x,y);
if (y>=0) s+=y;
else p*=y;
}
printf("S=%g\tP=%g\n",s,p);
}
И последняя версия программы с использованием цикла do-while.
#include <stdio.h>
#include <math.h>
int main()
{
float xn, xk, dx, x, y, s, p;
printf("Введите xn,xk,dx");
scanf("%f%f%f",&xn,&xk,&dx);
s=0;p=1;x=xn;
do
{
y=2*exp(sin(3*x))*cos(4*x);
printf("X=%g\tY=%g\n",x,y);
if (y>=0) s+=y;
else p*=y;
x+=dx;
}
while(x<=xk);
printf("S=%g\tP=%g\n",s,p);
}
Задача 4.2. Составить таблицу значений функции y=2esin(3x)cos(4x) на отрезке [xn;xk] с шагом dx. На экран вывести каждое третью пару x и y. Найти максимальное и минимальное значение y.
#include <iostream.h>
#include <math.h>
float f(float x, float a, float b, float c);
void main()
{
float xn, xk, dx, x, y, max,min;
int k=0;
|
|
cout<<"Vvedite xn, xk,dx\n";
cin>>xn>>xk>>dx;
for(x=xn;x<=xk;x+=dx)
{
y=f(x,2,3,4);
if (k%3==2)
cout<<"X="<<x<<",\tY="<<y<<endl;
k++;
if (k==1)
{
max=y;
min=y;
}
else
{
if (y>max) max=y;
if (y<min) min=y;
}
}
cout<<endl<<"Max="<<max<<",\tMin="
<<min<<endl;
//while (getch()!='e');
getch();
}
float f(float x, float a, float b, float c)
{
float y;
y=a*exp(sin(b*x))*cos(c*x);
return y;
}
#include "stdafx.h"
#include <iostream.h>
#include <math.h>
#include <conio.h>
float f(float x, float a, float b, float c);
{
float y;
y=a*exp(sin(b*x))*cos(c*x);
return y;
}
void main()
{
…
}
Vvedite xn, xk,dx
1 3
0.1
X=1.2, Y=0.112422
X=1.5, Y=0.722507
X=1.8, Y=0.561794
X=2.1, Y=-1.05619
X=2.4, Y=-4.35526
X=2.7, Y=-1.02516
X=3, Y=2.54846
Max=2.54846, Min=-4.35526
Задача 4.3. Вводится последовательность целых чисел, 0 – конец последовательности. Найти минимальное среди положительных, если таких значений несколько, определить, сколько их.
#include "stdafx.h"
#include <iostream.h>
#include <math.h>
#include <windows.h>
#include <conio.h>
void cout_rus(char text[])
{
char buffer[256];
CharToOem(text,buffer);
cout<<buffer;
}
int main(int argc, char* argv[])
{
int N,pr,k,min;
cout<<"\n N=";
cin>>N;
for(pr=k=0;N!=0;cout<<"N=",cin>>N)
if(N>0)
if (pr==0)
{
pr=1;
min=N;
k=1;
}
else
if (N<min)
{
min=N;
k=1;
}
else
if (N==min) k++;
if (pr)
{cout<<min;
cout_rus(" - минимальное число последовательности, таких чисел\t");
cout<<k<<endl;
}
else
cout<<"В последовательности нет положительных чисел";
|
|
}
N=3
N=5
N=6
N=2
N=-4
N=5
N=2
N=-2
N=2
N=13
N=10
N=-6
N=2
N=0
Дата добавления: 2019-09-13; просмотров: 213; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!