Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
inform_umo.rtf
Скачиваний:
4
Добавлен:
01.03.2025
Размер:
1 Мб
Скачать
☆

Методические указания

При решении ряда задач возникает необходимость многократного повторения однотипных действий при различных значениях параметров, определяющих эти действия. Алгоритмы, реализующие такие вычисления, называются циклическими, а повторяющиеся участки вычислений - циклами. Использование циклов позволяет выполнить большие объёмы вычислений при помощи компактных программ. Различают циклы с заданным и неизвестным числом повторений. К последним относятся интеррационные циклы с требуемой точностью. Бывают циклы с проверкой условия перед началом выполнения тела цикла, по окончании выполнения тела или внутри тела цикла . Ниже будут рассмотрены все указанные типы циклов для С++. [3].

Программирование циклов в си

Цикл while

Синтаксис цикла while (пока) таков):

while (условие _выражение)

оператор

В цикле типа while проверка условия производится перед выполнением тела цикла. Если результат вычисления условного выражения не равен нулю, то выполняется оператор (или группа операторов). Перед входом в цикл while в первый раз обычно инициализируют одну или несколько переменных для того, чтобы условное выражение имело какое либо значение . Оператор или группа операторов, составляющих тело цикла, должны, как правило, изменять значения одной или нескольких переменных , входящих в условное выражение , с тем чтобы в конце концов выражение обратилось в нуль и цикл завершился. Пример:

   printf(’’\n Отвечайте yes no(y/n) : ’’);

scanf(’’%c’’,&ch) ;

while(ch!=’y’ && ch!=’n’)

{

printf( ’’\n Отвечайте yes no(y/n): ’’);

scanf(’’%c’’,&ch);

}

Цикл do while

В цикле do while проверка условия осуществляется после

выполнения тела цикла. Синтаксис цикла:

do

оператор

while (условное_выражение );

Цикл do while прекращает выполнятся, когда условное выражение обращается в нуль ( остаётся ложным ). Как и для

цикла while, для цикла do while можно описать ситуации,

приводящие к выходу из цикла:

*Условное выражение обратилось в 0

*Внутри цикла встретился break.

*Внутри цикла выполнен оператор return.

Пример:

mm=10;

do

index++;

while (index<mm);

Цикл for

Наиболее общей формой цикла в С++ является цикл for.

Цикл for- это общая и более мощная форма, чем аналогичный цикл в языке Паскаль.

Конструкция for выглядит следующим образом:

for([ необязательное выражение1];

[ необязательное выражение2];

[ необязательное выражение3])

оператор

Каждое из трёх выражений можно опускать. Хотя в принципе каждое из этих выражений может быть использовано программистом как угодно, обычно первое выражение служит для инициализации индекса, второе для проверки на окончание цикла, а третье выражение - для изменения значения индекса.

Формально это правило можно описать так:

1.Если первое выражение присутствует то оно вычисляется .

2.Вычисляется второе выражение (если оно присутствует).

3.Исполняется тело цикла.

4.Вычисляется третье выражение (если оно присутствует).

5.Переход к пункту 2.

Появление в любом месте цикла оператора continue приводит к немедленному переходу к шагу 4.

Пример:

int i , mas[4];

for( i=0; i < 4;i++)

scanf(’’%d’’, &mas[i];

Программирование циклов в Паскале

while условное выражение do

оператор;

for с шагом 1 (инкрементный)

for индекс:=выражение1 to выражение2 do оператор;

for с шагом –1 (декриментный)

for индекс:=выражение1 downto выражение2 do оператор;

repeat

операторы

until ложное условное выражение.

Порядок выполнения работы

1.Получить вариант задания:

1. 10.

2. 11.

3. 12.

4. 13.

5. 14.

6. 15.

7. 16.

8. 17.

2. Составить программы вычисления значений суммы и произведений ряда на языках С++ и Паскаль.

3. Ввести и отладить программу.

4. Выполнить расчёты по программе.

Пример программы на Паскале:

{Сумма членов ряда с заданной точностью }

uses crt; { Подключается библиотека ввода-вывода }

var k, eps : Real;

n, i, x : Integer;

begin

ClrScr; { Производится очистка экрана }

WriteLn('Выполнил Поляков Д.Г., КТФ, гр. Р-11');

WriteLn; { Вывод пустой строки }

WriteLn('Введите точность вычисления суммы');

Read(eps); { Ввод точности вычислений }

n:=0; { Присвоение начального значения аргументу члена ряда }

repeat { Цикл с постусловием }

x:=1; { Присвоение начального значения рекуррентной формуле

вычисления факториала }

for i:=1 to n do x:=x*i;

k:=k+(n+1)/(2*x); { Накопление суммы членов ряда }

n:=n+1; { Приращение аргумента }

until (n+1)/(2*x) < eps; { Выход из цикла при достижении заданной точности }

WriteLn('Выводится результат вычисляемого выражения');

WriteLn(k:4:5); { Форматный вывод }

ReadKey; { Задержка экрана }

end.

Пример программы на Си: Программа вычисляет бесконечную сумму членов сходящегося ряда, причём расчёт ведётся от заданного n до тех пор, пока очередное значение выражения не станет меньше определённого числа a (точности расчёта), вводимого пользователем с клавиатуры.

// Подключаемые библиотеки

#include<stdio.h> // Библиотека ввода-вывода

#include<conio.h> // Библиотека работы с окнами

void main(void) // Главная функция (основной блок программы)

{

// Раздел объявления локальных переменных

int n, i; // i-переменная счётчика цикла

float s, ch, a, f; // s-сумма членов сходящегося ряда ch, f-факториал

clrscr(); // Очистка экрана

printf("Составитель: Грибков Алексей Николаевич");

printf("\n\t\tФакультет КТФ, группа Р-11");

printf("\n\nВведите точность расчёта (число a): ");

scanf("%f", &a); // Ввод точности расчёта

n=1; // Начальное значение аргумента для вычисления члена ряда

ch=1; // Начальное значение члена ряда

s=0; // Присвоение начального значения рекуррентного выражения

// накопления суммы

while(ch>a) // Цикл выполняется до тех пор, пока очередное значение

{ // выражения больше заданной точности

f=1; // Присвоение начального значения рекуррентного выражения

// вычисления факториала

for(i=1; i<=n; i++) f*=i; // Вычисление факториала

ch=(n+1)/(2*f); // Вычисление выражения

s+=ch; // Накопление суммы

n++; // Переход к следующему члену ряда

}

printf("Сумма равна s=%f", s); // Вывод полученного значения

// суммы на экран

getch(); // Задержка экрана до нажатия любой клавиши

}

Произведение

Пример программы на Паскале:

Пример программы на Си: Программа вычисляет произведение чисел ряда:

// Подключаемые библиотеки

#include<stdio.h> // Библиотека ввода-вывода

#include<conio.h> // Библиотека работы с окнами

#include<math.h> // Библиотека математических функций

void main(void) // Главная функция (основной блок программы)

{

// Раздел объявления локальных переменных

int n,i; // Переменные счётчика цикла

float p,ch,m,f; // p-произведение членов ряда ch, f-факториал

clrscr(); // Очистка экрана

printf("Составитель: Грибков Алексей Николаевич");

printf("\n\t\tФакультет КТФ, группа Р-11");

printf("\n\nВведите конец интервала (число m): ");

scanf("%f",&m); // Ввод верхней границы произведения

p=1; // Присвоение начального значения рекуррентной формуле

// накопления произведения

for(n=1;n<=m;n++) // Цикл выполняется до тех пор, пока n<m

{

f=1; // Присвоение начального значения рекуррентной формуле

// вычисления факториала

for(i=1;i<=n;i++) f*=i; // Вычисление факториала

ch=(sqrt(f)+8*n)/(3*n-2); // Вычисление члена ряда

p*=ch; // Вычисление произведения

}

printf("Произведение равно p=%f", p); // Вывод полученного значения

// произведения на экран

getch(); // Задержка экрана до нажатия любой клавиши

}

Содержание отчёта по лабораторной работе.

1.Цель лабораторной работы.

2.Блок-схема алгоритма программы.

3.Текст программы.

4.Результат расчёта.

Контрольные вопросы

  1. Что называется циклом?

  2. Какие операторы называются начальными и конечными операторами цикла?

  3. Что называется областью цикла?

  4. Может ли параметр цикла быть а) переменной с индексом, б) простой переменной вещественного типа?

  5. Может ли параметр цикла принимать нулевое и отрицательное значения?

  6. В каком случае можно опустить значения приращения параметра цикла в заголовке цикла?

  7. Какие операторы не могут быть конечными операторами цикла?

  8. Каким образом размещаются элементы многомерных массивов в памяти ЭВМ?

  9. Правила построения сложных циклов.

Литература [2,3].

Лабораторная работа № 4

СОСТАВЛЕНИЕ ВЫЧИСЛИТЕЛЬНЫХ ПРОГРАММ РАБОТАЮЩИХ С ИСПОЛЬЗОВАНИЕМ ОДНОМЕРНЫХ И ДВУМЕРНЫХ МАССИВОВ.

Цель работы: получение практических навыков программирования алгоритмов обработки массивов.

Задание

1.Изучить особенности программирования алгоритмов работы с массивами на алгоритмических языках СИ и Паскаль.

2. Запрограммировать полученный алгоритм.

3. Ввести текст программы в компьютер.

4. Выполнить расчёт по программе.

Для конкретного варианта составить массив исходных данных. Написать программу, реализующую заданный алгоритм обработки массива. Входную информацию и результаты расчёта вывести на экран. Снабдив их соответствующими заголовками.

Методические указания

Массивом называют упорядоченную последовательность величин, обозначенных одним именем. В отличие от переменной, которая занимает ячейку памяти ЭВМ, под массив отводится столько ячеек , сколько элементов в нём содержится. Элементы массива в памяти располагаются по строкам в СИ и в Паскале. Имя массива образуется в соответствии с общими правилами образования имён для используемого языка [3].

Отдельные элементы , образующие массив, называются лементами массива. К каждому элементу массива можно обратиться, указав имя массива и индексы, которые указывают положение массива. Таким образом переменная с индексами является элементом массива.

Количество индексов, используемых для обозначения массива, зависит от размерности массива. Максимальная величина размерности равна семи. Индексы элементов массива записываются в скобках имени массива.

Тип массива должен соответствовать типу данных, которые

образуют массив

Порядок выполнения лабораторной работы

  1. Получить вариант задания

Действия над одномерными массивами.

1. Найти сумму четных элементов массива.

2. Найти сумму положительных элементов массива.

3. Найти произведение элементов массива с четными индексами.

4. Найти количество нулевых и количество отрицательных эле-

ментов массива.

5. Найти сумму всех элементов массива, которые без остатка

делятся на "6".

6. Найти количество положительных элементов массива, не пре-

вышающих числа "7".

7. Заменить отрицательные элементы нулями.

8. Увеличить все положительные элементы массива на единицу.

9. Найти произведение ненулевых элементов массива.

10. Увеличить элементы массива с четными индексами на "1", а

элементы с нечетными индексами на "2".

11. Найти сумму отрицательных элементов массива а произведе-

ние положительных элементов.

12. Найти среднее арифметическое и среднее геометрическое

значения элементов массива.

13. Указать номера элементов массива, которые без остатка

делятся на "3" и на "5".

14. Указать номера элементов массива, которые больше "2", но

меньше "5".

15. Указать, какой процент от общего количества составляют

положительные элементы массива.

16. Сделать все положительные элементы массива отрицательны-

ми, вывести их индексы.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]