Главная страница

Язык Си. Алгоритм Свойства алгоритма дискретность состоит из отдельных шагов (команд) понятность


Скачать 4.66 Mb.
НазваниеАлгоритм Свойства алгоритма дискретность состоит из отдельных шагов (команд) понятность
Дата05.02.2023
Размер4.66 Mb.
Формат файлаppt
Имя файлаЯзык Си.ppt
ТипПрограмма
#921318
страница6 из 11
1   2   3   4   5   6   7   8   9   10   11

Алгоритм Евклида





«5»: Выполнить задание на «4» и подсчитать число шагов алгоритма для каждого случая.


a


64168


358853


6365133


17905514


549868978


b


82678


691042


11494962


23108855


298294835


НОД(a,b)


шагов





Последовательности


Примеры:
    1, 2, 3, 4, 5, …
    1, 2, 4, 7, 11, 16, …
    1, 2, 4, 8, 16, 32, …


an = n


a1 = 1, an+1 = an+1


a1 = 1, an+1 = an + n


an = 2n-1


a1 = 1, an+1 = 2an


b1 = 1, bn+1 = bn+1


c1 = 2, cn+1 = 2cn





Последовательности


Задача: найти сумму всех элементов последовательности, которые по модулю больше 0,001:


Элемент последовательности (начиная с №2):


n


1


2


3


4


5


...


b


1


2


3


4


5


...


c


2


4


8


16


32


...


z


-1


1


-1


1


-1


...


b = b+1;


c = 2*c;


z = -z;





Алгоритм


начало


S


конец


нет


да


|a| > 0.001?


S = S + a;


S = 0; b = 1; c = 2; z = -1; a = 1;


начальные значения


a = z*b/c;
b = b + 1; c = 2*c; z = -z;


первый элемент


a = 1;


S = 0;


новый элемент


изменение


Перестановка?


?





Программа


#include
main()
{
int b, c, z;
float S, a;
S = 0; z = -1;
b = 1; c = 2; a = 1;
while (fabs(a) > 0.001) {
S += a;
a = z * b / c;
z = - z;
b ++;
c *= 2;
}
printf ("S = %10.3f", S);
}


переход к следующему слагаемому


начальные значения


увеличение суммы


расчет элемента последовательности


математические функции


fabs – модуль вещественного числа


Что плохо?


?


, b;


чтобы не было округления при делении





Задания


«4»: Найти сумму элементов последовательности с точностью 0,001:
Ответ:
S = 1.157
«5»: Найти сумму элементов последовательности с точностью 0,001:
Ответ:
S = 1.220





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


Задача: Ввести целое положительное число (<2000000) и определить число цифр в нем.
Проблема: Как не дать ввести отрицательное число или ноль?
Решение: Если вводится неверное число, вернуться назад к вводу данных (цикл!).
Особенность: Один раз тело цикла надо сделать в любом случае  проверку условия цикла надо делать в конце цикла (цикл с постусловием).


Цикл с постусловием – это цикл, в котором проверка условия выполняется в конце цикла.





Цикл с постусловием: алгоритм


начало


конец


нет


да


n <= 0?


тело цикла


условие


блок «типовой процесс»


ввод n


основной алгоритм





Программа


main()
{
int n;
do {
printf("Введите положительное число\n");
scanf("%d", &n);
}
while ( n <= 0 );
... // основной алгоритм
}


условие


Особенности:
    тело цикла всегда выполняется хотя бы один раз после слова while («пока…» ) ставится условие продолжения цикла





Сколько раз выполняется цикл?


a = 4; b = 6;
do { a ++; } while (a <= b);


3 раза
a = 7


a = 4; b = 6;
do { a += b; } while ( a <= b );


1 раз
a = 10


a = 4; b = 6;
do { a += b; } while ( a >= b );


зацикливание


a = 4; b = 6;
do b = a - b; while ( a >= b );


2 раза
b = 6


a = 4; b = 6;
do a += 2; while ( a >= b );


зацикливание





Задания (с защитой от неверного ввода)


«4»: Ввести натуральное число и определить, верно ли, что сумма его цифр равна 10.
Пример:
Введите число >= 0: Введите число >= 0:
-234 1233
Нужно положительное число. Нет
Введите число >= 0:
1234
Да
«5»: Ввести натуральное число и определить, какие цифры встречаются несколько раз.
Пример:
Введите число >= 0: Введите число >= 0:
2323 1234
Повторяются: 2, 3 Нет повторов.


Тема 6. Циклы с переменной





Цикл c переменной


Цикл – это многократное выполнение одинаковой последовательности действий.
    цикл с известным числом шагов цикл с неизвестным числом шагов (цикл с условием)

    Задача. Вывести на экран кубы целых чисел от 1 до 8 (от a до b).
    Особенность: одинаковые действия выполняются 8 раз.

Можно ли решить известными методами?


?





Алгоритм


начало


конец


нет


да


N <= 8?


N = 1;


N ++;


вывод cubeN


cubeN = N*N*N;

1   2   3   4   5   6   7   8   9   10   11


написать администратору сайта