Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Перечисляемые и интервальные типыСодержание книги
Поиск на нашем сайте Пример 20. Напишите программу, которая переменной t присваивает значение true, если первая дата предшествует (в рамках года) второй дате, и значение false в противном случае. Решение. Так как в условии задачи оговаривается, что обе даты должны находиться в рамках года, то дата должна задаваться днем и месяцем. Число дней любого месяца года не может быть более 31, число месяцев в году равно 12. Значение переменной t равно true, если номер первого месяца меньше второго, значение первого дня меньше второго при условии, что номера месяцев совпали. Program Example_20; Var dl,d2:l..31; ml,m2:l..12; t:Boolean; Write('Введите первую дату (день, месяц)'); Readln(dl,ml); Write('Введите вторую дату (день, месяц)'); Readln(d2,m2); t:=(ml<m2) Or ((ml=m2)And(dl<d2)); Writeln(t); End. Пример 21. Составьте программу, которая определяет, является ли введенный символ гласной или согласной буквой английского алфавита. Решение. По условию задачи все символы делятся на следующие группы: • гласные буквы английского алфавита; • согласные буквы английского алфавита; • символы, не являющиеся буквами английского алфавита. Program Example_21; Var ch: Char; Begin Write('Введите символ1); Readln(ch); Case Upcase(ch) Of 'A', 'E, 'I', 'O', 'U': Writeln('Это гласная буква английского алфавита'); 'A'..'Z': Writeln('Это буква английского алфавита'); Else Writeln ('Этот символ не является буквой английского алфавита'); End. Обратите внимание на то, что константы здесь в первом случае перечисляются через запятую, а во втором используется интервал значений. Пример 22. Найти к-е простое число в арифметической прогрессии 11, 21, 31, 41, 51, 61,.... Решение. Для решения поставленной задачи необходимо просматривать числа последовательности и проверять каждое из них на свойство простоты. Поскольку нам не известно, сколько членов последовательности необходимо просмотреть, мы должны просматривать этот ряд до тех пор, пока не найдем к-е простое число; для этого воспользуемся циклом с условием. Program Example_22; Var k: Integer; n, p,d: Longint; Begin Writeln('Введите номер числа’); Readln(k); n:=0; p:=l; While n<k Do Begin Inc(p,10); d:=2; While (p Mod d<>0) And (d<sqrt(p)) Do Inc(d); If d>=sqrt(p) Then Inc(n); End; Writeln(p); Readln; End. В этом решении мы смогли записать условие d<sqrt (p), так как типы integer и Real совместимы. Примеры рекурсивного программирования Пример 23. Вычисление факториала натурального числа. Решение. Для того чтобы вычислить М, надо знать значение (N—\)l и умножить его на N, при этом 1!=1. В общем виде это можно записать так:
Begin If n=l Then factorial:=1 Else factorial:=n*factorial(n-1); End; Найдем 5!. Как же будет вычисляться факториал этого числа? Первый вызов этой функции будет из основной программы (Например, а:= factorial(5), где переменной а присваиваем значение 5!). Так как N<>1, то пойдем по ветке Else и функции Factorial присваиваем значение n*Factorial(n-l), то есть надо умножить 5 на значение функции Factorial(4). Поэтому обращаемся второй раз к этой же функции, но передаем ее новое значение параметра - 4. Так делаем до тех пор, пока не передадим значение, равное 1. Тогда N= 1, а поэтому значение функции Factorial:=1. Таким образом, N = 1 - это условие, по которому процесс входа в следующую рекурсию заканчивается. Идет возвращение в точку вызова и подстановка в оператор присвоения значения вычисленной функции. То есть возвращаемся в предыдущую функцию для n=2: Factorial: =n*Factorial (п-1), значит, Factorial: =2*1, следовательно, Factorial(2) =2. И возвращаемся дальше. Таким образом, получаем значение Factorial (5) =120, это значение и присвоим переменной а. Пример 24. Перевод натурального числа из десятичной системы счисления в двоичную, Решение. Для решения этой задачи рассмотрим сначала, как перевести число из десятичной системы счисления в двоичную. Пусть есть число 39, которое и надо представить в двоичной системе. Для этого разделим его на 2, получим целую часть и остаток от деления. Целую часть снова делим на 2 и получаем целую часть и остаток. Так делаем до тех пор, пока целую часть можно делить на 2 (то есть пока она не станет равной 1). Теперь, начиная с этой единицы, выписываем в обратном порядке все остатки от деления, это и будет запись числа 39 в двоичной системе счисления: 3910 =1001112 Таким образом можно переводить любое натуральное число из десятичной системы счисления в двоичную, а также и в другие системы (например, восьмеричную или шестеричную). Опишем процедуру: Procedure Rec(n: Integer); Begin If n>l Then Rec(n Div 2); Write(n Mod 2); End; Первая цифра (1) выводится на экран из последнего вызова, следующая цифра (0) из предпоследнего и так далее, последняя (1) - из первого. Таким образом, вывод очередной цифры происходит перед тем, как выйти из данной функции. Файлы. Файловый тип данных. Открытие файла. Чтение и запись Пример 25. Прочитаем файл целых чисел и выведем их на экран(Решения везде приводятся для версии Turbo Pascal) Assign(Fl,'a:int.dat'); {связываем с внешним файлом} Reset(Fl); {открываем его для чтения} While Not EOF (Fl) Do {пока не достигнут конец файла F1} Begin Read(Fl,n); {считываем очередное число} Write(n, ' '); {выводим его на экран} End; Close(Fl); {закрываем файл} Пример 26. Создадим файл целых чисел с именем Dan1.dat, причем ни одно из чисел не равно 0. Решение. Первоначально «свяжем» файловую переменную с конкретным внешним файлом при помощи процедуры Assign. Откроем файл для записи - процедура Rewrite. Конец ввода чисел - ввод числа ноль. Program Example_26; Var F: File Of Integer/ n: Integer; Begin Assign(F, 'a:danl.dat'); {связываем с внешним файлом} Rewrite(F); {открываем его для записи} Writeln('конец ввода чисел - О1); Repeat {пока не будет введен 0} Writeln('введите число'); Readln(n); {ввод числа с клавиатуры} {если введено число, отличное от 0, то дописываем его в данную строку файла F1} If n<>0 Then Write (F, n); Until n=0/ {если ввели 0, то заканчиваем запись данного файла} Close(F); {закрываем файл} End. Пример 27. В файле Da1l.dat записаны целые числа (см. предыдущую задачу). Вычислить сумму элементов и результат вместе с исходными данными записать в файл Dan2.dat. Program Example_27; Var Fl, F2: File Of Integer; {файловые переменные } S, N: Integer; Begin {с именем файла Fl связывается внешний файл на дискете} Assign(Fl,'Danl.dat'); Reset(Fl)/ {открытие файла Fl для чтения } {с именем файла F2 связывается внешний файл на дискете} Assign(F2,'Dan2. dat1’); Rewrite(F2);{открытие файла F2 для записи} S:=0; While Not EOf(Fl) Do {проверка на конец файла Fl} Begin Read(Fl,N); {чтение элемента из файла Fl} Write(F2,N); {запись элемента в файл F2} S:=S+N/ {вычисление суммы} End;{запись суммы элементов в конец файла F2} Write(F2,S); Write('Результат находится в файле Dan2.dat1) Close(F1); {закрытие файла F1 для чтения} Close(F2); {закрытие файла F2 для записи} Readln; End. Текстовые файлы Пример 28. Дан текстовый файл, содержащий только целые числа, в каждой строке может быть несколько чисел, которые разделяются пробелами. Вывести на экран все числа с учетом разбиения на строки и подсчитать число элементов в каждой строке. Решение. Пусть в файле содержится следующая информация: 132 456 87 656 5765 45 12 34 76 524 6253 3 233 323 38764 Этот файл можно создать в среде Turbo Pascal таким образом: • создать новый файл (команда New меню File); • записать все числа в строках через пробелы; • сохранить его, например «а: int1.dat». Теперь этот файл будем использовать в программе. Program Exarnple_29; Var F: Text; x, k: Integer; Begin Assign(F, 'a:intl.dan1); {связываем с внешним файлом} Reset(F); {открываем для чтения} While Not Eof(F) Do {пока не конец файла} Begin k:=0; {начальное число элементов строки} While Not Eoln(F) Do {пока не конец строки} Begin Read(F, x); {считываем очередное число} Write(х,’’); {вывод его на экран} Inc(к); {увеличиваем счетчик} End; Writeln(' в строке', к,'элементов'); Readln(F); {переходим к следующей строке файла} End; Close(F); {закрываем файл} Readln; End. Массивы Пример 29. Найти сумму пяти целых чисел. Решение. Для решения этой задачи необходимо описать пять переменных для целых чисел и еще одну - для их суммы. Обозначим первые как al, а2, а3, а4 и a5, а их сумму s. Тогда можно составить такую программу, используя функцию нахождения суммы пяти чисел: Program Example_29; Var al,a2,a3,a4,a5,s: Integer; Function Sum(xl,x2,x3,x4,x5: Integer): Integer; Begin Sum:=xl+x2+x3+x4+x5; End; Begin Writeln (' введите пять целых чисел'); Readln(al,a2,аЗ,а4,а5); {вводим пять целых чисел} s:=Sum(al,а2,аЗ,а4,а5); {находим их сумму} Writeln('их сумма равна!,s); {вывод результата на экран} Readln; End. А как найти сумму, например, 100 целых чисел? Здесь необходимо использовать массив. Пример 30. Составить программу нахождения суммы элементов массива. Решение. Опишем две процедуры (формирования и вывода массива) и функцию нахождения суммы элементов, которые будем использовать в основной части. Заметим, что заполнение и вывод массива можно осуществить только поэлементно, то есть можно сначала присвоить значение первому элементу, затем второму и так далее, то же самое и с выводом на экран — выводим первый, второй, третий... и так до последнего. Будем вводить значения элементов массива с клавиатуры. Program Exaraple_30; Const n=30; {n - это число элементов массива} Type myarray=Array[1..n] Of Integer; Var A: myarray; s: Integer;{s - значение этой переменной будет равно сумме всех элементов массива} Procedure Initl(Var m: myarray); Var i: Integer; {i - это переменная для работы с элементами массива} Begin Writeln('введите ',п, ' чисел’); For i:=l To n Do {ввод массива с клавиатуры} Readln(m[i]); {чтение i-ro элемента} End; Procedure Print(m: myarray); Var i: Integer; Begin For i:=l To n Do {вывод массива} Write(m[i]: 3); {вывод i-го элемента} Writeln; End; Function Sum(m: myarray): Integer; Var i, sum: Integer; Begin sum:=0; {начальное значение суммы} For i:=l To n Do sum:=sum+m[i]; {к уже найденной сумме первых (i-1) элементов прибавляем i-й элемент} End; Begin Initl(A); {обращение к процедуре формирования} Print(А); {вывод массива} s:=Sum(A); {нахождение суммы элементов} Writeln('их сумма равна ',s); {вывод результата на экран} Readln; End. Первый способ задания одномерного массива - это задание с клавиатуры (он был рассмотрен в примере выше - процедура Initl). Второй способ задания - это задание с помощью генератора случайных чисел; этот способ более удобен, когда много элементов в массиве. Пример 31. Составим программу заполнения и распечатки одномерного массива с помощью генератора случайных чисел. Процедура вывода уже составлена ранее, а процедуру формирования напишем новую. Program Example_31; Const n=30; dd=51; {n - это число элементов массива, dd - для генератора случайных чисел} Type myarray = Array [l..n] Of Integer; Var A: myarray; Procedure Init2(Var m:myarray); {процедура заполнения (инициализации) массива случайными числами} Var i:Integer; Begin For i:=l To n Do m[i]:=-25+Random(dd); {Random выбирает случайное число из отрезка от 0 до dd-1, тогда i-му элементу массива будет присвоена сумма выбранного случайного числа и -25, таким образом, массив будет заполняться случайными числами от -25 до -25+(dd-1), то есть до -26+dd} End; Procedure Print(m:myarray); {процедура вывода (распечатки) массива} Begin Randomize; {включение генератора случайных чисел} Init2(А); {обращение к процедуре заполнения массива} Print(А); {обращение к процедуре вывода заполненного массива} Readln; End.
Третий способ задания — это чтение чисел из файла. Пример 32. Пусть в файле записано несколько строк, а в каждой из них по 30 целых чисел. Составить программу с использованием процедуры заполнения массива из файла. Program Example_32; Const n=30; {n - это число элементов массива,} Type myarray = Array [l..n] Of Integer; Var A: myarray; F: text; Procedure Init3(Var m:myarray); {процедура заполнения (инициализации) массива} Var i:Integer; Begin For i:=l To n Do Read(f, m[i]) {чтение из файла очередного числа} End; Procedure Print(m:myarray); {процедура вывода (распечатки) массива} Begin {связываем файловую переменную с конкретным внешним файлом} Assign(F, '...'); Reset(F); {открываем его для чтения} While Not Eof(F) Do Begin {считываем очередную строку} Init3(A); {обращение к процедуре заполнения массива} Print(А); {обращение к процедуре вывода} Readln(F); End; Readln; End.
|
||
|
Последнее изменение этой страницы: 2017-02-07; просмотров: 245; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.176 (0.008 с.) |