Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Решение задач с использованием циклов с условием
Задача 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; просмотров: 288. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |