Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Уроки программирования на Turbo Pascal


Информационный Канал Subscribe.Ru


Уроки программирования на Turbo Pascal #11

Подписчиков на 2002-08-20 - 1787 человек(а).

Рассылка проекта "Олимпиада.com.ru".


Главная Архив задач Конкурс Обучение Рассылки Форум Контакты

Здравствуйте, уважаемые подписчики!


  В 10 уроке при разборе 5 и 6 задач из 9 урока были допущены ошибки, которые и были замечены подписчиком Stranger. В задаче 5 строка
  y:=(x mod 10)*1000+((x div 100) mod 10)*100+((x div 1000) mod 10)*10+x div 1000;
должна быть вот такой:

  y:=(x mod 10)*1000+((x div 10) mod 10)*100+((x div 100) mod 10)*10+x div 1000;

  Аналогичная ошибка в след задаче: строка
  X2:=(x div 1000) mod 10+(x div 100) mod 10+x mod 10; {сумма последних трех цифр}
должна быть вот такой:
  X2:=(x div 100) mod 10+(x div 10) mod 10+x mod 10; {сумма последних трех цифр}

Спасибо за исправление ошибки.


Урок 11


  Продолжим знакомство с операторами цикла, имеющимися в Паскале. Повторение группы операторов (тела цикла) можно организовать и с помощью оператора, где проверка условия осуществляется после выполнения тела цикла.

11.1.Оператор цикла REPEAT (цикл ДО).

  Формат оператора:
  REPEAT оператор; оператор;...оператор UNTIL логическое условие;

  Часть программы, заключенная между служебными словами REPEAT и UNTIL, повторяется до тех пор, пока не станет истинным логическое выражение, стоящее после слова UNTIL. Между словами REPEAT (повторить) и UNTIL(до тех пор, пока) можно записать любое количество операторов без использования операторных скобок.
  В отличие от оператора WHILE вычисление логического выражения происходит не до, а после очередного повторения цикла. Из-за этого цикл REPEAT обязательно выполнится хотя бы раз, а цикл WHILE может не выполнится ни разу. Если условие в цикле ПОКА является условием продолжения повторений, то условие в цикле ДО - условием выхода из цикла, его завершения. Поэтому для одной и той же задачи эти условия противоположны.

Пример 1. Составить программу подсчета суммы S первых 1000 членов гармонического ряда 1+1/2+1/3+1/4+...1/N используя оператор цикла REPEAT.

Program Summa;
Var   S:real;
      N:integer;
Begin
  S:=0;N:=0;
  repeat
    N:=n+1;
    S:=s+1/n
  Until n>1000;
  Writeln(s);
  Readln
End.


11.2.Поиск наибольшего числа.

  Предположим, нам необходимо ввести с клавиатуры N чисел, найти из них наибольшее и вывести его. Для решения этой задачи предлагается следующий алгоритм:

1. Ввести первое число в переменную Max.
2. Ввести следующее число в переменную Next.
3. Если Next>Max, то Max:=Next.
Пункты 2 и 3 повторять, пока не будут введены все числа.
4. Вывести значение переменной Max.

  Действительно ли будет напечатано наибольшее из N чисел? Докажем это.

  После выполнения первого пункта в переменной Max находится наибольшее из уже введенных чисел. Это справедливо, т.к. введено лишь одно число.
  Повторение пунктов 2 и 3, в сущности, представляет собой цикл, который выполняется, пока не будут введены все числа. Если перед очередным повторением цикла в Max находится наибольшее из введенных чисел, то после выполнения пунктов 2 и 3 там снова будет наибольшее из введенных чисел.
  В последнем пункте значение Max будет выведено.

  Этот пример показывает, что алгоритм можно доказать, как доказывают математическую теорему. Программируя доказательный алгоритм, можно не опасаться ошибок в алгоритме, конечно, если нет ошибок в доказательстве.

Program maximum;
Var    N, max, next, k: integer;
Begin
  Write('Введите количество чисел'); Readln(n);
  Write('Введите число'); Readln(max);
  k:=1;
  repeat
    Write('Введите число'); Readln(next);
    K:=k+1;
    If next>max then max:=next
  Until k=n;
  Writeln(max);
  Readln
End.


Тренировочные задания.
1. Введите с клавиатуры 6 чисел и определите их среднее арифметическое.
2. Напишите программу, которая вводит целые числа с клавиатуры и складывает их, пока не будет введено число 0.
3. Напечатайте 20 первых степеней числа 2.
4. Найдите минимальное из N чисел.
5. Дано натуральное число. Выяснить, является ли оно простым, т.е. делится только на 1 и на само себя.

Разбор заданий урока 10.
1. Даны целые числа а и b (а>b). Определить:
   a. Результат целочисленного деления a на b, не используя стандартную операцию целочисленного деления;

Program prim_10_1a;
Var   a, b, n: integer;
Begin
  Write('Введите два числа, a>b ');
  Readln(a,b);
  N=0;
  While a>b do
  Begin
    N:=n+1;
    A:=a-b
  End;
  Writeln(' результат целочисленного деления ',n);
  Readln
End.


2. Известны оценки по информатике каждого из 20 учеников класса. В начале списка перечислены все пятерки, затем все остальные оценки. Сколько учеников имеют по информатике оценку "5"?. Условный оператор не использовать.

Program prim_10_2;
Var   х ,n :word;
Begin
  Write('Введите оценку');
  Readln(х);
  N=0;
  While х=5 do
  Begin
    N:=n+1;
    Write('Введите оценку');
    Readln(х);
  End;
  Writeln(' имеют отлично ',n, ' учеников');
  Readln
End.


5. *В некоторой стране используются денежные купюры достоинством в 1, 2, 4, 8, 16, 32 и 64. дано натуральное число N. Как наименьшим количеством таких денежных купюр можно выплатить сумму N (указать количество каждой из используемых для выплаты купюр)? Предполагается, что имеется достаточно большое количество купюр всех достоинств.

Program prim_10_5;
Var   n,k,x:word;
Begin
  Write('Введите число'); Readln(n);
  K:=64;
  While n>0 do
  Begin
    If n>=k then begin Writeln(n div k, 'купюр по ', k);n:=n mod k end;
    K:=k div 2
  End;
  Readln
End.


Желаю успехов!
Ганилова Татьяна Евгеньевна school6@rikt.ru


Архив рассылки:

  Архив предыдущих выпусков рассылки: http://subscribe.ru/catalog/comp.soft.prog.bpascal ;

Урок 1 Урок 2 Урок 3 Урок 4 Урок 5
Урок 6 Урок 7 Урок 8 Урок 9 Урок 10

Реклама в рассылке:

RLE    

  


Подпишитесь на наши рассылки:

Новости проекта "Олимпиада.com.ru" [Алексей Шамис]
Новости проекта "Olimpiada.com.ru". Новые темы на форуме. Информация о пополнениях в архиве задач. Оперативно и своевременно!

Уроки программирования на Turbo Pascal [Татьяна Ганилова]
Хотите стать Великим Программистом? Начните свой путь к вершине славы с изучения языка Turbo Pascal. Он как нельзя лучше подходит для начинающих программистов и в то же время используется для разработки сложных "профессиональных" программ.

Олимпиадные задачи с решениями на Turbo Pascal [Алексей Шамис]
В рассылке публикуются решения интересных олимпиадных задач различного уровня. Содержит много теоретической информации. Периодичность - 2-3 раза в неделю.

Задача в неделю. Олимпиадные задачи по информатике [Александр Алексеев]
Каждый понедельник в рассылке публикуется задача, которую необходимо решить и в следующий понедельник прислать программу на тестирование. Решения проверяются, и в пятницу публикуется разбор и итоги тестирования.



Всегда рады видеть Вас на нашем сайте. Жду ваших предложений и замечаний, Алексей Шамис

Copyright © 2002 by Tatyana Ganilova.



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное