Студопедия

КАТЕГОРИИ:

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

Решение задач с использованием циклов с условием




 

Задача 1

Если мы сложим все цифры какого-либо числа, затем все цифры найденной суммы и будем повторять этот процесс, мы, наконец, получим однозначное число (цифру), называемое цифровым корнем данного числа. Например, цифровой корень числа 34 697 равен 2 (3+4+6+9+7=29; 2+9=11; 1+1=2). Составим программу для нахождения цифрового корня натурального числа.

Решение

Программа, вычисляющая цифровой корень данного числа, может выглядеть следующим образом:

Program Example_57;

Var n, k, s: Longint;

Begin

Writeln('Введите число');

Readln(n);

s:=n;

While s>9 Do

Begin

k:=s; s:=0;

Repeat

s:=s+k mod 10;

k:=k div 10;

Until k=0;

End;

Writeln('Цифровой корень числа ',n,

' равен',s);

End.

Задача 2

Задано целое четное число n. Написать программу вычисления квадратов целых четных чисел от 0 до n.

 

Program Example_58;

var i, y, n: integer;

begin

writeln('Введите целое четное число');

readln(n);

i:=0;

while i<=n do

begin

   y:=i*i;

   writeln('Квадрат числа ' ,i,

' равен ',y);

   i:=i+2

end;

readln;

end.

 

 

СИМВОЛЬНЫЙ ТИП ДАННЫХ

 

Данные символьного типа описываются с помощью идентификатора Char.

Значением переменной символьного типа может быть любой символ − буквы, цифры, знаки препинания и специальные символы. Каждому символу алфавита соответствует индивидуальный числовой код от 0 до 255.

Примечание. Наиболее распространенной международной системой кодирования символов является система ASCII. Символы с кодами от 0 до 127 составляют так называемую основную таблицу кодов ASCII. Эта часть идентична на всех IBM-совместимых компьютерах. Символы с кодами от 128 до 255 составляют так называемую национальную кодовую таблицу. Именно в ней располагаются, например, русские буквы.

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

Обычно значения для переменных типа Char задаются в апострофах: ch:='*'; а:='3'; letter:='G'.

Кроме того, имеется возможность задавать значения непосредственно указанием ASCII-кода: kd:=#65 (символ 'А'); s:=#13 (код клавиши Enter).

Первые 32 символа ASCII являются управляющими. Для указания этих символов используются записи #<ASСII-код> или ^<символ>. Например, ^[ − символ, соответствующий клавише [Esc]; ^G − звуковой сигнал.

В модуле CRT имеется функция ReadKey, которая осуществляет ввод одного символа с клавиатуры.

Формат применения:

имя переменной:=ReadKey.

Выражение n:=ReadKey читается как n присвоить значение ReadKey.

Так как символьный тип является порядковым, то для него справедливо все, что было сказано о порядковых типах.

Пример 1

Написать программу вывода последовательности символов ААВАВС...АВ...YZ.

Решение

Последовательность символов строится по следующему правилу: Последовательно выводятся начальные отрезки латинского алфавита, состоящие из 1 символа, из 2 символов и так далее, до тех пор, пока не будет выведен весь алфавит. Количество таких отрезков равно количеству букв в алфавите. Так как символьный тип данных является порядковым типом, то можно использовать цикл с параметром символьного типа:

Program Example_59;

Var i, j: Char;

Begin

For i:='a' To 'z' Do

{количество начальных отрезков алфавита}

For j:='а' То i Do

{количество символов в данном

начальном отрезке}

Write(j);

Readln;

End.

 

 

Пример 2

Написать программу, которая подсчитывает количество цифр, входящих в исходный текст. Текст − это последовательность символов, ввод которой заканчивается нажатием клавиши [Enter].

Решение

Так как признаком конца ввода последовательности символов служит нажатие клавиши [Enter] (ей соответствует символ с кодом 13), то будем вводить символы до тех пор, пока значение очередного символа не совпадет со значением #13. Анализируя каждый символ, будем увеличивать счетчик, если символ является цифрой:

Program Example_60;

Var ch: Char;

k: Integer;

Begin

k:=0;

While ch<>#13 Do

{пока не нажата клавиша <Enter>}

Begin

If (ch>='0') and (ch<='9') Then Inc(k);

Read(ch);

End;

Writeln(^G,' Количество цифр равно ',k);

End.

 

Переменные символьного типа удобны для организации простейшего диалога с пользователем во время выполнения программы. Приведем пример такого диалога:

 

Repeat

Writeln('Хотите продолжить работу

(у/n)?');

Readln(ch);

Until Upcase (ch)='N';

 

Функция Upcase(ch) преобразует букву ch в прописную (эта функция работает только с буквами английского алфавита, все другие символы не изменяются).

 

Ограниченный тип данных

 

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

Var a: 1..25; ch: 'a'..'z';

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

Переменная ограниченного типа сохраняет все свойства переменных базового типа.

Для чего применяется ограниченный тип данных? Использование ограниченного типа делает программу более наглядной и понятной. Например, если в программе переменная b может принимать только значения 3,4, 5, 6, 7, 8, то лучше описать ее следующим образом:

Var b:3..8; а не просто Vаг b:Integer;

тогда в случае выхода значения b за диапазон 3..8 при использовании первого описания будет выдано диагностическое сообщение, которое поможет найти ошибку.

Пример

Напишите программу, в результате выполнения которой переменной t присваивается значение true, если первая дата предшествует (в рамках одного года) второй дате, и значение false в противном случае.

Решение

Так как в условии задачи оговаривается, что обе даты должны находиться в рамках одного года, то дату достаточно задать указанием дня и месяца. Количество дней любого месяца года не может быть более 31, количество месяцев в году равно 12. Значение переменной t равно true, если номер первого месяца меньше второго, либо значение первого дня меньше второго при условии, что номера месяцев совпали.

Program Example_61;

Var d1, d2: 1..31;

m1, m2: 1..12;

t: Boolean;

Begin

Write('Введите первую дату

(день, месяц)');

Readln(d1, m1);

Write('Введите вторую дату

(день, месяц) ');

Readln(d2, m2);

t:=(m1<m2) or ((m1=m2) and (d1<d2));

Writeln(t);

End.

Оператор варианта (выбора)

 

Case <порядковая переменная> Of

<константа 1>: <оператор 1>;

<константа 2>: <оператор 2>;

<константа n>: <оператор n>;

[Else <оператор>;]

 End;

Выполнение оператора выбора начинается с вычисления выражения, которое должно принимать значение порядкового типа. В случае если результат вычисления равен одной из перечисленных констант, то выполняется соответствующий оператор. Затем управление передается за пределы оператора выбора. Если значение выражения не совпадает ни с одной константой, то выполняется оператор, стоящий после Else, если он есть, либо управление передается на оператор, следующий за End.

Эта конструкция предназначена для замены конструкций из вложенных условных операторов и применяется для обработки ситуаций с несколькими исходами.

Примечание

1. Тип константы должен совпадать с типом выражения.

2. Ветвь Else заключена в квадратные скобки, что гово­рит о том, что эта часть оператора выбора необязательна.

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

4. В качестве операторов могут использоваться и состав­ные операторы.

5. Можно задавать не только одну константу, но и спи­сок и диапазон констант. Соответствующие примеры приве­дены далее.

Пример 1

Составьте программу, в которой определяется, какой буквой − гласной или согласной − является введенный символ английского алфавита.

Решение

Разделим все символы на три группы:

• гласные буквы английского алфавита;

• согласные буквы английского алфавита;

• символы, не являющиеся буквами английского алфавита.

Program Example_62;

Var ch: Char;

Begin

Write('Введите символ ');

Readln(ch);

Case Upcase(ch) Of

'A','E','I','0','U': Writeln ('Это

гласная буква английского алфавита ');

'A'..'Z': Writeln('Это согласная буква

английского алфавита');

Else Writeln('Этот символ не является

   буквой английского алфавита ');

End; {case}

End.

Обратите внимание на то, что в первом случае константы перечисляются через запятую, а во втором используется интервал значений.

Пример 2

Подсчитать число пятниц, приходящихся на 13 числа в ХХ веке, если известно, что 13 января 1901 года было воскресенье.

Решение

При решении данной задачи не требуется рассматривать все дни нашего века, достаточно изучить дни недели только у всех 13−х чисел. Следует учитывать, что 2000 год входит в ХХ век (а 1900 год − в XIX век). Переменная d принимает значение дня недели для очередного 13–го числа (d=4 соответствует пятнице), в операторе case определяется день недели для 13−го числа в следующем месяце.

Program Example_63;

vard, s, i,j: word;

Begin

d:=6; s:=0;

for i:=1 to 100 do {цикл по годам}

for j:=1 to 12 do

   begin

      if d=4 then s:=s+1;

   case j of

         1,3,5,7,8,10,12:d:=(d+3)mod 7;

         4,6,9,11: d:=(d+2) mod 7;

         2: if (i mod 4=0) then

d:=(d+1) mod 7;

      end; {case}

   end; {for}

writeln(s);

End.

Пример 3

Для натурального числа k от 1 до 99 напечатать фразу "мне k лет", учитывая, что при некоторых значениях k слово "лет" надо заменить на слово "год" или "года".

Решение

Ключевое слово ("лет", "год", или "года") в описании возраста человека зависит только от последней цифры в числе прожитых лет, исключением из общего правила является возраст от 11 до 14 лет.

program Example_64;

vark: 1..99;

Begin

writeln('Введите возраст в годах');

readln(k);

write('мне ',k);

if k in [11..14] then write('лет')

else

case k mod 10 of

   0, 5..9: write('лет');

   1: write('год');

   2..4: write('года');

end {case}

End.

Пример 4

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

Program Example_65;

var century, year, c: word;

Begin

write('Введите номер года==>');

readln(year);

century:=(year-1) div 100+1;

{если номер года делится на сто, то это конец предыдущего века, а не начало нового, поэтому из номера года вычитается 1}

if century>=11 then

Begin

   write('x');

   century:=century mod 10;

end; {if}

case century of

1..3: for c:=1 to century do

write ('I');

   4: write(IV');

5..8:begin

      write('V');

   for c:=1 to century-5 do

write ('I')

   end;

9:write('IX');

0, 10: write('X')

end; {case}

readln;

End.

Перечисляемый тип данных

 

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

Например,

Var month:(january, february, march,

april, may,june, july, august,

september, october, november,

december);

Порядок элементов перечисляемого типа определяется порядком их следования в описании. Левый имеет минимальное значение (значение функции Ord для него равно 0), а правый − максимальное.

К переменным перечисляемого типа можно применять операции сравнения. Так, например, february<november.

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

 










Последнее изменение этой страницы: 2018-05-31; просмотров: 235.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...