Студопедия
Главная страница | Контакты | Случайная страница | Спросить на ВикиКак

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Языки программирования.

Читайте также:
  1. I. Языки программирования
  2. Lt;variant>Языки программирования высокого уровня
  3. Алгоритмические языки
  4. Алгоритмические языки. Трансляторы.
  5. Алтайские языки
  6. Афразийские языки.
  7. Естественные и искусственные языки
  8. Индоевропейские языки.
  9. Искусственные языки-посредники и интерлингвистика
  10. История развития вычислительной техники,средств и методов программирования. Поколения ЭВМ

Предположим, нам необходимо ввести с клавиатуры 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.

Сегодня мы познакомимся с оператором, который обеспечивает повторение цикла, управляемое переменной.

13.1. Цикл ПЕРЕСЧЕТ (прямой).
Формат оператора:

FOR переменная := выражение 1 ТО выражение 2 DO оператор;

Переменная должна быть порядкового типа. Порядковыми называются все простые типы, значения которых можно расположить в возрастающем порядке. Из известных нам это: INTEGER, WORD, LONGINT, BYTE, CHAR. Выражение 1 и Выражение 2 должны быть того же типа, что и переменная. Чтобы цикл выполнился хотя бы раз выражение1 должно быть не больше выражения2.

Выполнение начинается с вычисления значений выражения1 и выражения2. затем переменная получает значение выражения1 и делается проверка, не превышает ли значение переменной выражения2. Если не превышает, выполняется оператор стоящий после служебного слова DO. После завершения оператора переменная получает следующее по порядку значение, и все повторяется, начиная с проверки.

Когда значение переменной становится равным выражению2, оператор выполняется последний раз.

ПРИМЕР 1. Напечатать ряд из повторяющихся чисел 20 в виде:
20 20 20 20 20 20 20 20 20 20

Код программы:

var i: byte;
begin
for I:=1 to 10 do write(20,' ');
readln;
end.

ПРИМЕР 2. Напечатать числа следующим образом:
10 10.4
11 11.4
. . .
25 25.4

Код программы (переменная используется не только для управления циклом но и для вывода на экран в качестве результата):

var i: byte;
begin
for I:=10 to 25 do write(I,' ',I+0.4:0:1);
{при сложении целого I и вещественного 0.4 получаем
вещественный результат, значит надо выполнить его
форматирование при выводе на экран}
readln;
end.

13.2. Цикл ПЕРЕСЧЕТ (обратный).
Возможен вариант оператора, когда переменная принимает последовательно убывающие значения.
Формат оператора:

FOR переменная := выражение 1 DOWNТО выражение 2 DO оператор;

В этом случае, чтобы цикл выполнился хотя бы раз, выражение1 должно быть не меньше выражения2. Например:

For c:='z' downto 'а' do writeln(с);

 

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

Задача 1.
Вводится последовательность из N целых чисел. Найти сумму всех отрицательных чисел.
Код программы.

Var I,n,x,sum:integer;
Begin
Write('Введите длину последовательности N=');
Readln(n);
Sum:=0;
For I:=1 to n do
Begin
Write('Введите число');
Readln(x);
if x<0 then sum:=sum+x
end;
If sum=0 then writeln('отрицательных чисел нет')
Else writeln('сумма отрицательных чисел =', sum);
Readln
End.

Задача 2.
Вводится последовательность ненулевых чисел, 0 - конец последовательности. Определить, сколько раз последовательность меняет знак.

Var old, new: real;
K: integer;
Begin
Write('введите число');
Readln(old);
Write('введите число');
Readln(new);
K:=0;
Repeat
If new*old<0 then k:=k+1;
Old:=new;
Write('введите число');
Readln(new);
Until new=0;
If k>0 then writeln ('Последовательность меняет знак ',k,' раз')
else writeln ('Последовательность не меняет знак ');
readln;
end.

 

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

Составить программу, которая в зависимости от порядкового номера дня недели (1, 2, ..., 7) выводит на экран его название (понедельник, вторник, ..., воскресенье).
Для этого воспользуемся условным оператором.

Загрузка...

Var x: byte;
Begin
Write(' введите число от 1 до 7');
Readln(x);
If x=1 then writeln('понедельник');
If x=2 then writeln('вторник');
If x=3 then writeln('среда');
If x=4 then writeln('четверг');
If x=5 then writeln('пятница');
If x=6 then writeln('суббота');
If x=7 then writeln('воскресенье');
Readln
End.

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

В таком случае лучше подойдет оператор ВАРИАНТА (или ВЫБОРА).

Если условный оператор напоминает дорожную развилку, то оператор выбора - это разделение пути на множество дорог, по одной из которых пойдет выполнение программы.

Формат оператора:

CASE выражение OF
P1:<оператор 1>;
P2:<оператор 2>;
. . .
PN:<оператор N>;
ELSE <оператор N+1>
END;

Выражение порядкового типа вычисляется, и его значение отыскивается в одном из списков констант. После этого выполняется соответствующий оператор. Если значение выражения не совпало ни с одной из меток, то выполняется оператор из строки ELSE. Cокращенная форма оператора не содержит ELSE. Метки оператора варианта могут быть константами любого типа, но их тип должен совпадать с типом выражения.

Тогда код нашей программы будет выглядеть иначе:

Var x: byte;
Begin
Write(' введите число от 1 до 7'); Readln(x);
Case x of
1: writeln('понедельник');
2: writeln('вторник');
3: writeln('среда');
4: writeln('четверг');
5: writeln('пятница');
6: writeln('суббота');
7: writeln('воскресенье');
end;
Readln
End.

Если при выборе альтернативы необходимо выполнение нескольких операторов, то нужно заключить их в операторные скобки BEGIN . . . END;, т.е. использовать составной оператор.
При использовании оператора CASE можно использовать диапазон допустимых значений параметра. Например, чтобы определить, введена ли как символьная переменная цифра, можно написать:

CASE I OF
'0'..'9':writeln('цифра');
ELSE writeln ('не цифра')
END;

Задача. Для целого числа K от 1 до 99 напечатать фразу "Мне k лет", учитывая при этом, что при некоторых значениях K слово "лет" надо заменить на слово "год" или "года". Например, 11 лет, 22 года, 51 год. (Данное решение можно улучшить используя дополнительно условный оператор. Попробуйте.)

var k:byte;
begin
write('Введите число лет'); readln(k);
case k of
1,21,31,41,51,61,71,81,91:writeln('Мне ',k,' год');
2..4,22..24,32..34,42..44,52..54,62..64,72..74,82..84,92..94:writeln('Мне ',k,' года');
else writeln('Мне ',k,' лет');
end;
readln;
end.

Языки программирования.

Языки программирования – система обозначений для точного описания алгоритмов для ЭВМ. Эти языки являются искусственными, со строго определенным синтаксисом (строение оператора и правила сочетания слов в нем) , выполняет правила - программист;


Дата добавления: 2014-12-19; просмотров: 35 | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2017 год. (0.184 сек.)