Глава 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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!