|
Организация циклов с параметромСтр 1 из 2Следующая ⇒ Лабораторная работа 2 Циклы ( для выполнения лабораторной работы №2 необходимо проработать материал лекций №№ 5-6 и разобрать примеры, приведенные в данной методичке ) Организация циклов с параметром.. 2 Цикл while в циклах с параметром.. 2 Вычисление суммы чисел натурального ряда от 1 до 10. 2 Определение наибольшей степени целого числа 100, которую можно вычислить, пользуясь типом long. 2 Подсчет количества цифр в числе N.. 2 Вычисление значений функции на отрезке. 3 Вычисление на отрезке значений функции с условием и оформление результатов. 3 Вычисление на отрезке значений функции с условием и оформление результатов в виде таблицы (в стиле С++) 4 Цикл do-while в циклах с параметром.. 5 Вычисление суммы чисел натурального ряда от 1 до 10. 5 Калькулятор. 5 Проверка входных данных. 6 Вычисление значений функции на отрезке. 7 Вычисление на отрезке значений функции с условием и оформление результатов. 7 Цикл for в циклах с параметром.. 7 Вычисление суммы чисел натурального ряда от 1 до 10. 7 Вывод на экран кодов символов. 8 Приостановка выполнения программы на n секунд. 8 Получение натуральных делителей числа N.. 9 Проверка, является ли натуральное число N простым.. 9 Вычисление значений функции на отрезке. 9 Вычисление на отрезке значений функции с условием и оформление результатов. 10 Организация итерационных циклов. 11 Цикл while в итерационных циклах. 11 Вычисление числа π. 11 Вложенные циклы.. 12 Вычисление значения многочлена на отрезке (схема Горнера) 13 Разложение функции на отрезке в ряд Тейлора. 14 Организация работы с последовательностью чисел, вводимых с клавиатуры.. 16 Корректная организация циклов. 17 Оптимизация программы.. 17 Примеры граф-схем алгоритмов. 20 Циклические алгоритмы.. 20 Алгоритмы циклов с параметром.. 20 Алгоритм типа «развилка, вложенная в цикл с параметром». 22 Алгоритмы итерационных циклов. 23 Алгоритмы с вложенными циклами. 26 Алгоритм вложенного цикла с развилкой. 27
Организация циклов с параметром Цикл while в циклах с параметром Вычисление суммы чисел натурального ряда от 1 до 10
//вариант_1 const int N=10; int main () { int i=1, summa=0; //определение и инициализация переменных // i является одновременно и счетчиком цикла while (i<=N) { summa += i; //вычисление суммы i++; //получение нового числа } cout << summa<< endl; _getch(); return 0; }
//вариант_2 const int N=10; int main () { int i=1, summa=0; //определение и инициализация переменных //i является одновременно и счетчиком цикла while (i<=N) summa += i++; //вычисление суммы и получение нового числа cout << summa<< endl; _getch(); return 0; } Определение наибольшей степени целого числа 100, которую можно вычислить, пользуясь типом long #include <LIMITS.H> //LONG_MAX int main () {int p=0; //искомая степень float x=1.; //тип float позволяет иметь значение x до 3.4*10^38 while (x < LONG_MAX) // x< 2 147 483 648 { x*=100.; p++; } cout << setiosflags(ios::fixed)<< x/100. << setw(8) <<p-1 <<endl; getch(); return 0; } Подсчет количества цифр в числе N //найти количество и сумму цифр числа int main() { int N=123456; int sum=0, k=0; while (N>0) { sum += N%10; N /=10; k++; } cout << k << " " << sum << endl; //6 21 _getch(); return 0; } Вычисление значений функции на отрезке Составим программу для вычисления и вывода на печать таблицы значений функции у = а*х2 при а =17.7, х изменяется от x0 = 5.5 до xn = 35.0 с шагом h = 0.5 с помощью цикла while. int main () {double a=17.7, x0=5.5, xn=35.0, x, y, h=0.5; const double X_end = xn+h/2; //35.0+h/2, чтобы попала точка 35.0 x= x0; while (x < X_end) { y = a*x*x; printf ("x=%7.2lf y=%10.2lf\n", x, y); x+=h; _getch(); //для задержки результатов вывода на экране
}
return 0; } Вычисление на отрезке значений функции с условием и оформление результатов Составим программу для вычисления и вывода на печать таблицы значений функции с условием у(х), если х изменяется от x0 = 2.0 до xn = 5.0 с шагом h=0.5 с помощью цикла while. int main() { double x0=2.0, xn=5.0, x, y, h=0.5; const double X_end = xn+h/2; //5.0 +h/2, чтобы попала точка 5.0
////////////////////////////////////////////////////////////////////// printf("\nwhile:\n"); printf ("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n", 218,196,196,196,196,194,196,196,196,196,196,196,196,196,196,191); printf ("%c x %c y %c\n",179, 179, 179); x=x0; while ( x < X_end) { if (x<=3.5) y=cos(x); else y=sin(x); printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n", 195,196,196,196,196,197,196,196,196,196,196,196,196,196,196,180); printf("%c%4.2lf%c%9.5lf%c\n", 179, x, 179, y, 179); x+=h; } printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n", 192,196,196,196,196,193,196,196,196,196,196,196,196,196,196, 217); _getch(); return 0; }
Результаты работы программы:
while: ┌────┬─────────┐ │ x │ y │ ├────┼─────────┤ │2.00│ -0.41615│ ├────┼─────────┤ │2.50│ -0.80114│ ├────┼─────────┤ │3.00│ -0.98999│ ├────┼─────────┤ │3.50│ -0.93646│ ├────┼─────────┤ │4.00│ -0.75680│ ├────┼─────────┤ │4.50│ -0.97753│ ├────┼─────────┤ │5.00│ -0.95892│ └────┴─────────┘
Вычисление на отрезке значений функции с условием и оформление результатов в виде таблицы (в стиле С++) Составим программу для вычисления и вывода на печать таблицы значений функции с условием у(х), если х изменяется от x0=2.0 до xn=5.0 с шагом h=0.5 с помощью цикла while.
#include <iomanip> #include <math.h> int main() { double x0=2.0, xn=5.0, x, y, h=0.5; const double X_end = xn+h/2; //5.0+h/2, чтобы попала точка 5.0 char c,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10; c=char(196); c1=char(218); c2=char(194); c3=char(191); c4=char(179); c5=char(195); c6=char(197); c7=char(180); c8=char(192); c9=char(217); c10=char(193); cout<< c1 << c << c << c << c << c << c2 << c << c << c << c << c << c << c << c << c << c << c << c3 << '\n'; cout<<c4<<" x " << c4 << " y " << c4 << '\n'; int i=0; x=x0+i*0.5; while (x < X_end) { if (x<=3.5) { double r=cos(x); y=r*r; } //end_if else { y=sin(x)*log(x); } //end_else cout << setiosflags(ios::fixed) << setprecision(2); cout<< c5 << c << c << c << c << c << c6 << c << c << c << c << c << c << c << c << c << c << c << c7 << '\n'; cout<<c4<<setw(5) << x; cout <<setiosflags(ios::fixed)<<setprecision(6); cout<<c4<<setw(11) << y<<c4<<"\n"; i++; //эти два оператора можно заменить на x+=0.5; x=x0+i*0.5; } //end_while cout<< c8 << c << c << c << c << c << c10 << c << c << c << c << c << c << c << c << c << c << c << c9 << '\n'; _getch(); return 0; }
Результаты работы программы: ┌─────┬───────────┐ │ x │ y │ ├─────┼───────────┤ │ 2.00│ -0.416147│ ├─────┼───────────┤ │ 2.50│ -0.801144│ ├─────┼───────────┤ │ 3.00│ -0.989992│ ├─────┼───────────┤ │ 3.50│ -0.936457│ ├─────┼───────────┤ │ 4.00│ -0.756802│ ├─────┼───────────┤ │ 4.50│ -0.977530│ ├─────┼───────────┤ │ 5.00│ -0.958924│ └─────┴───────────┘ Цикл do-while в циклах с параметром Вычисление суммы чисел натурального ряда от 1 до 10
#define N 10 int main () {int i=1, summa=0; do summa += i++; while (i<=N); cout << summa << endl; _getch(); return 0; }
Калькулятор
int main() { double n1, n2, ans; char oper, ch; do { cout << "\nEnter first number, operator, second number: " <<endl; cin >> n1 >> oper >> n2; switch (oper) { case '+': ans = n1 + n2; break; case '-': ans = n1 - n2; break; case '*': ans = n1 * n2; break; case '/': ans = n1 / n2; break; default: ans = 0; } cout << "Answer = " << ans; cout << "\nDo another (enter 'y' or 'n')? "; cin >> ch; } while(ch!= 'n'); _getch(); return 0; }
Проверка входных данных В данном примере оператор цикла требует повторного ввода данных до тех пор, пока не будут введены значения из диапазона от 1 до 20: int r; do { cout << "input 1 <= r <=20" << endl; cin >> r; } while (r <1 || r>20);
В следующем примере цикл проверяет, чтобы вводимые данные были положительными и отличны от 13: int r; do {cout << "input r >0, r!=13: " <<endl; cin >> r;} while (r <0 || r==13);
В этом примере с помощью цикла while реализована проверка до 10 попыток ввода значения 25: int i=1, rez=0; while (i++ <=10 && rez!=25) {cout << "input rez=25"<<endl; cin >> rez;}
Напомним ( см. метод. указания лаб.раб.1 ), что контроль правильности ввода значения некоторого типа можно реализовать, например, таким образом: //проверка ввода значения из диапазона значений типа unsigned char unsigned int uchar; //более широкий тип unsigned int do { cout << "input unsigned char:" << endl; cin >> uchar; } while(uchar < 0 || uchar > UCHAR_MAX);
//проверка ввода значения из диапазона значений типа int float f; //более широкий тип float int i; do { cout << "input int:" << endl; cin >> f; } while(f < INT_MIN || f > INT_MAX); //диапазон значений типа int i= f; cout <<"ok " << i << endl; Цикл for в циклах с параметром Приостановка выполнения программы на n секунд const int DELAY =500000000; int main (){ long i; int n; cout << "sec=?\n"; cin >> n; For (; n; n--) for (i=0; i<DELAY; i++); cout << n << endl; _getch(); return 0; }
Или
int main () {double a= 17.7, x0 = 25.5, xn = 35.0, x, y, h = 0.5; const double X_beg = x0-h/2; //25.5-h/2, чтобы попала точка 25.5 for (x=35.0; x > X_beg; x-=h) { y = a*x*x; printf ("x=%7.2lf y=%10.2lf\n", x, y); _getch(); } return 0; }
Или
#include <math.h> int main () { double a= 17.7, x, y, h = 0.5, x0= 25.5, xn=35.0; const int k = int((xn-x0)/h)+1; //или floor ((xn-x0)/h)+1; x=x0; for (int i=1; i<=k; i++) { y = a*x*x; printf ("x=%7.2lf y=%10.2lf\n", x, y); x+=h; _getch(); } return 0; } Вложенные циклы Оптимизация программы Оптимизация – преобразование исходного текста программы, при котором: • результат выполнения остается неизменным, • улучшаются некоторые характеристики программы (время выполнения, затраты оперативной памяти, размер исходного кода).
Оптимальность программы в значительной степени определяется ее алгоритмом. При оптимизации программы необходимо выявить ее фрагменты, являющиеся «основными потребителями» ресурса, а затем перепрограммировать их: например, схема Горнера преобразовывает алгоритм с целью сокращения количества выполняемых операций. Большинство компиляторов сегодня выполняют сами некоторые виды оптимизации программы. И тем не мене, отметим некоторые приемы:
Рассмотрим нахождение корней квадратного уравнения, как пример оптимизации алгоритма с ветвлением: aх2 + bx + c = 0 (a, b, c – вещественные) if (!a &&!b &&!c) выведем на экран: “Корней бесконечно много”; if (!a &&!b && c) выведем на экран: “Корней нет”; if (!a && b) выведем на экран: “Один вещественный корень”; d = b*b – 4*a*c; вычислим дискриминант if (d >= 0) выведем на экран: “Вещественные корни:”; и найдем корни: d1= sqrt (d); х1= (-b + d1) /(2 *a); х2= (-b - d1) /(2 *a); if (d < 0) выведем на экран: “Комплексные корни:”; и вычислим их: dk = -b / (2 * a); //действ.часть Рассмотрим структуру программы: //каждая ветвь завершается оператором return double a, b, c, d, d1, x1, x2, dk, mk; /*_1_*/ if (!a &&!b &&!c) { { cout << “Корней бесконечно много”; /*_2_*/ if (!a &&!b && c) { …. return 2; }
/*_3_*/ if (!a && b) { …. return 3; }
d = b*b – 4*a*c; //вычисление дискриминанта /*_4_*/
if (d >= 0) // действительные корни { …. return 4; }
/*_5_*/ //комплексные корни:*/
Циклические алгоритмы Лабораторная работа 2 Циклы ( для выполнения лабораторной работы №2 необходимо проработать материал лекций №№ 5-6 и разобрать примеры, приведенные в данной методичке ) Организация циклов с параметром.. 2 Цикл while в циклах с параметром.. 2 Вычисление суммы чисел натурального ряда от 1 до 10. 2 Определение наибольшей степени целого числа 100, которую можно вычислить, пользуясь типом long. 2 Подсчет количества цифр в числе N.. 2 Вычисление значений функции на отрезке. 3 Вычисление на отрезке значений функции с условием и оформление результатов. 3 Вычисление на отрезке значений функции с условием и оформление результатов в виде таблицы (в стиле С++) 4 Цикл do-while в циклах с параметром.. 5 Вычисление суммы чисел натурального ряда от 1 до 10. 5 Калькулятор. 5 Проверка входных данных. 6 Вычисление значений функции на отрезке. 7 Вычисление на отрезке значений функции с условием и оформление результатов. 7 Цикл for в циклах с параметром.. 7 Вычисление суммы чисел натурального ряда от 1 до 10. 7 Вывод на экран кодов символов. 8 Приостановка выполнения программы на n секунд. 8 Получение натуральных делителей числа N.. 9 Проверка, является ли натуральное число N простым.. 9 Вычисление значений функции на отрезке. 9 Вычисление на отрезке значений функции с условием и оформление результатов. 10 Организация итерационных циклов. 11 Цикл while в итерационных циклах. 11 Вычисление числа π. 11 Вложенные циклы.. 12 Вычисление значения многочлена на отрезке (схема Горнера) 13 Разложение функции на отрезке в ряд Тейлора. 14 Организация работы с последовательностью чисел, вводимых с клавиатуры.. 16 Корректная организация циклов. 17 Оптимизация программы.. 17 Примеры граф-схем алгоритмов. 20 Циклические алгоритмы.. 20 Алгоритмы циклов с параметром.. 20 Алгоритм типа «развилка, вложенная в цикл с параметром». 22 Алгоритмы итерационных циклов. 23 Алгоритмы с вложенными циклами. 26 Алгоритм вложенного цикла с развилкой. 27
Организация циклов с параметром ![]() ![]() ЧТО И КАК ПИСАЛИ О МОДЕ В ЖУРНАЛАХ НАЧАЛА XX ВЕКА Первый номер журнала «Аполлон» за 1909 г. начинался, по сути, с программного заявления редакции журнала... ![]() ЧТО ТАКОЕ УВЕРЕННОЕ ПОВЕДЕНИЕ В МЕЖЛИЧНОСТНЫХ ОТНОШЕНИЯХ? Исторически существует три основных модели различий, существующих между... ![]() Что делает отдел по эксплуатации и сопровождению ИС? Отвечает за сохранность данных (расписания копирования, копирование и пр.)... ![]() Живите по правилу: МАЛО ЛИ ЧТО НА СВЕТЕ СУЩЕСТВУЕТ? Я неслучайно подчеркиваю, что место в голове ограничено, а информации вокруг много, и что ваше право... Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:
|