История языка Pascal, его основные концепции. Линейный и циклический алгоритмы, типы данных. Условные операторы, операторы цикла. Программа вычисления суммы n первых членов геометрической прогрессии по любым двум ее членам, номера которых известны.
Аннотация к работе
Цель: Закрепить и углубить теоретические знания языка программирования на практике, по следующим темам: линейный алгоритм, условный оператор (модуль CRT), циклы, графика, подпрограммы, множества, записи, строки, одномерные и двумерные массивы. Строка имеет две разновидности длины: Общую длину строки, которая характеризует размер памяти, выделяемый строке при описании. Цикл с предусловием используется для программирования процессов, в которых число повторений оператора цикла не известно, а задается некоторое условие его окончания. Выполнение оператора цикла с предусловием начинается с проверки условия, записанного после слова while. Для программной реализации циклических процессов с неизвестным числом повторений существует еще один оператор - оператор цикла с постусловием, который имеет следующий вид: Оператор цикла с постусловиемПрактические занятия используются для тщательного изучения содержательно-методических принципов построения программы, содержания и структуры прикладного программного обеспечения, обсуждения методики изучения отдельных тем курса с различными вариантами технического и методического обеспечения.
Введение
Цель: Закрепить и углубить теоретические знания языка программирования на практике, по следующим темам: линейный алгоритм, условный оператор (модуль CRT), циклы, графика, подпрограммы, множества, записи, строки, одномерные и двумерные массивы.
Задачи.1. Повторить теоретический материал.
2. Закрепить теоретический материал.
3. Решить предложенные задачи на языке Паскаль.
4. Правильно оформить предложенные задачи в отчет.
2. Обзор языка программирования.
2. История языка Pascal
Основные концепции языка были разработаны в 1967-1968г. профессором Николаусом Виртом (Niklaus Wirth). Стандарт языка был разработан им в 1974г. (PASCAL - User Manual and Report, ISO Pascal Standard Kathleen Jensen and Niklaus Wirth) совместно с Кетлин Йенсен (Kathleen Jensen). Паскаль достаточно быстро превратился из средства, предназначенного для обучения студентов программированию, в инструмент, который стали использовать для создания больших программных проектов.
В настоящее время действуют три стандарта языка. Первый из них - нерасширенный Паскаль (unextended Pascal) был разработан в 1983 году. Второй - Extended Pascal - содержит расширения, касающиеся модульного программирования (раздельная компиляция модулей, импорт-экспорт подпрограмм, интерфейсная часть и реализация), и дополнен рядом процедур и функций (прямой доступ к файлам, работа со строками и т д). Последний - объектный Паскаль (Object-Oriented Extensions to Pascal), в отличие от первых двух, формально не утвержден, но оформлен в виде отчета (ANSI Technical Report) в 1993г. Объектный Паскаль поддерживает классы, обладающие свойствами и методами, наследование классов, переопределение методов у потомков (полиморфизм) и ряд других атрибутов объектно-ориентированного программирования.
Алгоритмом называется точное и понятное предписание исполнителю совершить последовательность действий направленных на решение поставленной задачи.
Линейным алгоритмом - называется вычислительный процесс, при котором все этапы решения задачи выполняются в естественном порядке следования записи этих этапов.
Циклический алгоритм - это многократное повторяемый участок вычислений.
Перечислимый тип данных задается непосредственно перечислением всех значений, которые может принимать переменная данного типа. При описании отдельные значения указываются через запятую, а весь список заключается в круглые скобки. Например, Var Season: (winter, spring, summer, autum);
Temp: (23,24,25,26);
Строковый тип: Строка - в общем случае это последовательность символов. Строка представляет собой особую форму одномерного массива символов, которая имеет существенное отличие. Массив символов имеет фиксированную длину (количество элементов), которая определяется при описании. Строка имеет две разновидности длины: Общую длину строки, которая характеризует размер памяти, выделяемый строке при описании. Текущую длину строки (всегда меньше или равную общей длине), которая показывает количество смысловых символов строки в каждый конкретный момент времени.
Для определения данных строкового типа в Turbo Pascal 7.0 введены стандартные типы String и PCHAR.
Условные операторы предназначены для изменения порядка выполнения инструкций программы, в соответствии с некоторым условием.
Оператор условия IF.
Он может принимать одну из следующих форм: IF условие THEN оператор; (неполная форма)
Условие задается переменной и ее соотношением с некоторой константой или значением выражения. Если условие выполняется, то будет выполнен указанный оператор.
IF условие THEN оператор 1 ELSE оператор 2; (полная форма)
Добавление к конструкции служебного слова ELSE позволяет выполнить определенные действия в случае, когда условие не выполняются.
Операторы цикла
Для выполнения некоторого количества повторяющихся действий целесообразно использовать операторы цикла.
Циклы со счетчиком
При использовании цикла со счетчиком следует задать переменную-счетчик. При этом надо помнить, что тип такой переменной должен быть скалярным: Integer, Char, Boolean, перечисляемый тип.
For To Do ;
Счетчик меняется от меньшего к большему с шагом 1
For Downto Do ;
Счетчик меняется от большего к меньшему с шагом 1
Циклы с предусловием
Цикл с предусловием используется для программирования процессов, в которых число повторений оператора цикла не известно, а задается некоторое условие его окончания.
Оператор цикла с предусловием while do ;
Выполнение оператора цикла с предусловием начинается с проверки условия, записанного после слова while. Если оно соблюдается, то выполняется , а затем вновь проверяется условие и т.д. Как только на очередном шаге окажется, что условие не соблюдается, то выполнение прекратится.
В теле цикла обязательно должен быть оператор, влияющий на соблюдение условия, в противном случае произойдет зацикливание.
Циклы с постусловием.
Для программной реализации циклических процессов с неизвестным числом повторений существует еще один оператор - оператор цикла с постусловием, который имеет следующий вид: Оператор цикла с постусловием
Repeat
;
;
...
;
Until ;
где Repeat (повторять), Until (до тех пор, пока).
Этот оператор аналогичен оператору цикла с предусловием, но отличается от него тем, что проверка условия производится после очередного выполнения тела цикла. Это обеспечивает его выполнение хотя бы один раз.
Тип данных - это множество величин, объединенных определенной совокупностью доступных операций.
Одномерный массив - последовательность элементов. Число, которых фиксировано и которым присвоено одно имя.
Запись - это структура данных, состоящая из фиксированного числа компьютера, называется полями записи.
Множество в языке программирования Pascal представляет собой ограниченный, неупорядоченный набор различных элементов одного типа.
Строка - это последовательность символов ASCII (таблица кода). При использование в выражениях строка заключается в апострофы.
Двумерный массив-это совокупность данных каждого значения, которых зависит от 2 чисел, которые можно рассматривать как индекс строки, и индекс столбца матрицы.
3. Специальная часть
3.1 Решение задачи
3.1.1 Постановка задачи
Составить программу вычисления суммы n первых членов геометрической прогрессии по любым двум ее членам, номера которых известны.
3.1.2 Таблица идентификаторов
№ Переменные тип Значения
1 n integer Количество членов геометрической прогрессии
2 b1, b2 real Первый и второй члены геометрической прогрессии
3 Sn real Сумма n членов геометрической прогрессии
4 q real Знаменатель прогрессии
3.1.3 Блок-схема
3.1.4 Программа
Program progressiy;
Var n: integer; b1, b2, Sn, q: real;
Begin
Writeln ("введите n");
Readln (n);
Writeln ("введите 2 числа");
Readln (b1, b2);
q: =b2/b1;
Sn: = (b1* (exp (n*ln (q)) - 1) / (q-1));
Writeln (Sn: 3: 0);
Readln;
End.
3.1.5 Результат работы программы
3.2 Решение задачи
3.2.1 Постановка задачи
Составить программу, проверяющую принадлежность точки с координатами (х, у) заштрихованной области.
3.2.2 Таблица идентификаторов
№ Переменные тип Значения
1 x, y Real Координаты точек
3.2.3 Блок-схема
3.2.4 Программа program grafic;
var x,y: real;
begin writeln ("введите координаты точек");
readln (x,y);
if (sqr (x) sqr (y) >4) and (x>=-2) and (x=-2) and (y<=2) and ( (x>0) and (y0)) then writeln ("принадлежит") else writeln ("не принадлежит");
readln;
end.
3.2.5 Результат работы программы
3.3 Решение задачи
3.3.1 Постановка задачи
Долгожитель, т.е. человек, проживший более 100 лет, обратил внимание, что если к сумме квадратов цифр его возраста прибавить число его дня рождения, то получится как раз его возраст. Определить, сколько лет этому человеку.
3.3.2 Таблица идентификаторов
№ Переменные тип Значения
1 n integer Возраст человека
2 i integer Месяц рождения человека
3 a integer Единицы
4 b integer Остаток от деления на 100
5 h integer Десятки
6. с integer Сотни
7 v integer Сумма квадратов цифр его возраста
3.3.3 Блок-схема
3.3.4 Программа
Program data;
Uses crt;
Var i, n, a, b, c, v, h: integer;
Begin
Clrscr;
For n: =100 to 999 do for i: =1 to 31 do begin a: =n mod 10;
b: =n mod 100;
h: =b div 10;
c: =n div 100;
v: =a*a h*h c*c;
if n=i v then writeln (n," ", i);
end;
readln;
end.
3.3.5 Результат работы программы
3.4 Решение задачи
3.4.1 Постановка задачи
Нарисовать рисунок.
3.4.2 Таблица идентификаторов
№ Переменные тип Значения
1 Gd integer Графический драйвер
2 Gm integer Графический режим
3.4.3 Программа
Uses graph,crt;
Var gd, gm: integer;
Begin gd: =0; gm: =0;
Initgraph (gd, gm," ");
setcolor (5);
Line (100, 200,250, 200);
Line (250, 200, 209,150);
Arc (157,183, 61, 195, 60);
Setfillstyle (0,3);
Floodfill (256, 200,5);
Ellipse (200, 135, 75, 233, 15, 20);
Ellipse (200, 135, 303, 75, 15, 20);
Ellipse (208, 139, 303, 91, 15, 24);
setfillstyle (1,8);
floodfill (220,145,5);
Arc (120, 200, 180, 0,10);
Setfillstyle (1,1);
Floodfill (125, 202,5);
Arc (120, 200, 180, 0, 15);
Arc (130, 200, 260, 0, 15);
Arc (200, 200, 180, 0,10);
setfillstyle (1,1);
Floodfill (125, 202,5);
Arc (120, 200, 180, 0, 15);
Arc (130, 200, 260, 0, 15);
Arc (200, 200, 180, 0,10);
Setfillstyle (1,1);
Floodfill (200, 202,5);
Arc (200, 200, 180, 0, 15);
Arc (210, 200, 260, 0, 15);
Line (150, 90, 150, 124);
Line (155, 90, 155, 123);
Line (150, 90, 155, 90);
Setfillstyle (1,1);
Floodfill (153, 100,5);
Arc (144, 83, 41, 310,10);
Arc (158, 83, 259, 126,10);
Setfillstyle (1,1);
Floodfill (144, 83,5);
Circle (144, 83,5);
Setfillstyle (1,2);
Floodfill (144, 83,5);
Circle (158, 83,5);
Setfillstyle (1,2);
Floodfill (158, 83,5);
Circle (255, 200,5);
Setfillstyle (1,4);
Floodfill (255, 200,5);
Setfillstyle (1,8);
Floodfill (200, 150,5);
Circle (215, 177,7);
Setfillstyle (1,9);
Floodfill (215, 177,5);
Setfillstyle (1, 14);
floodfill (121, 200,5);
readkey;
closegraph;
end.
3.5 Решение задачи
3.5.1 Постановка задачи
Даны первый член и разность арифметической прогрессии. Написать рекурсивную функцию для нахождения суммы n первых членов прогрессии.
3.5.2 Таблица идентификаторов
№ Переменные Тип Значение
1 Sn Real Сумма n первых членов арифметической прогрессии
2 n integer Количество членов арифметической прогрессии
3 A1,A2 Real Первый и второй члены арифметической прогрессии
4 d Real Разность прогрессии
3.5.3 Блок-схема
3.5.4 Программа
Program recursiy;
var A1,d,A2,Sn: real; n: integer;
function prog (n: integer): integer;
begin if n=1 then prog: =A1 else prog: =A1 d* (n-1) prog (n-1);
end;
begin
Writeln ("введите n");
readln (n);
writeln ("введите первый и 2-ой член арифметической прогрессии");
readln (A1, A2);
d: =A2-A1;
Sn: =prog (n);
writeln (Sn);
readln;
end.
3.5.5 Результат работы программы
3.6 Решение задачи
3.6.1 Постановка задачи
Дан двумерный массив. Удалить среднюю строку (строки).
3.6.2 Таблица идентификаторов
№ Переменные Тип Значение
1 a array заполнение двумерного массива
2 i, j integer Параметры цикла
3 n, m integer Размерность массива
4 k integer Количество элементов до среднего
3.6.3 Блок-схема
3.6.4 Программа
Var a: array [1. .100,1. .100] of integer;
i,j,m,n,k: integer;
begin writeln ("Введите разм. мас");
readln (n,m);
randomize;
for i: =1 to n do begin for j: =1 to m do begin a [i,j]: =random (100);
write (a [i,j]: 3);
end;
writeln;
end;
writeln ("После удаления");
if n mod 20 then begin k: =n div 2 1;
For i: =k to n-1 do for j: =1 to m do a [i,j]: =a [i 1,j] ;
for i: =1 to n-1 do begin for j: =1 to m do write (a [i,j]: 3);
writeln;
end;
end else if n mod 2=0 then begin k: =n div 2;
For i: =k to n-2 do for j: =1 to m do a [i,j]: =a [i 2,j] ;
for i: =1 to n-2 do begin for j: =1 to m do write (a [i,j]: 3);
writeln;
end; end;
readln;
end.
3.6.5 Результат работы программы
3.7 Решение задачи
3.7.1 Постановка задачи
Дан одномерный массив целых чисел произвольной длины. Заполните массив случайными числами до 100. Используя, оператор выбора, создайте меню, в котором при нажатии на клавишу производятся следующие действия: 1 - вычислить среднее геометрическое четных элементов массива;
2 - найти количество делителей максимального числа;
3 - вставить в массив два элемента с данными значениями: первый после минимального элемента, второй - перед минимальным элементом.
3.7.2 Таблица идентификаторов
№ Переменные Тип Значение
1 a array Заполнение одномерного массива
2 Max integer Максимальный элемент
3 Min integer Минимальный элемент
4 i integer Параметр цикла
5 N integer Размерность массива
6 k integer Количество делителей
7 m integer Выбор действия
8 s Real среднее геометрическое четных элементов массива
9 v, c integer два элемента вставляемые в массив
10 k1 integer Номер позиции перед (после) которой вставляем элемент
11 f integer Количество элементов, которые делятся на 2 без остатка
12 d integer Произведение всех элементов, которые делятся на 2 без остатка
3.7.3 Блок-схема
3.7.4 Программа uses crt;
Var a: array [1. .100] of integer;
n, i,m,min,max,k,f,d,k1,c,v: integer;
S: real;
begin clrscr;
randomize;
writeln ("введите разм. массива");
readln (n);
for i: =1 to n do begin a [i]: =random (101);
write (a [i]: 3);
end;
writeln;
writeln ("введите номер операции программы");
writeln ("1-вычислить среднее гео-ое четных эл. мас");
writeln ("2-найти ко-во делителей max числа");
writeln ("3-вставить в массив: 1-ый после min эл,2-ой перед min эл");
readln (m);
case m of
1: begin f: =0;
for i: =1 to n do begin if a [i] mod 2=0 then f: =f 1 end; writeln (f);
d: =1; s: =0;
for i: =1 to n do begin if a [i] mod 2=0 then d: =d*a [i] ;
end;
writeln (d);
if d=0 then s: =0 else s: =exp (1/f * ln (d));
writeln ("ср. геом=",S: 3: 3);
readln;
end;
2: begin max: =a [1] ;
for i: =1 to n do if a [i] >max then begin max: =a [i] ;
end;
for i: =1 to max do if max mod i=0 then k: =k 1;
writeln ("ко-во делителей max числа",k);
readln;
end;
3: begin writeln ("введите 2 числа");
readln (v,c);
min: =a [1] ;
k1: =1;
for i: =1 to n do if a [i] <min then begin min: =a [i] ; k1: =i; end;
writeln;
for i: =n downto k1 do a [i 1]: =a [i] ;
a [k1]: =v;
for i: =n 1 downto k1 1 do a [i 1]: =a [i] ;
a [k1 2]: =c;
for i: =1 to n 2 do write (a [i]: 3);
readln;
end;
end;
end.
3.7.5 Результат работы программы
3.8 Решение задачи
3.8.1 Постановка задачи
Дан массив записей, содержащий сведения о расписании поездов: направление; фамилия, имя, отчество машиниста; время отправления поезда. Необходимо осуществить: 1. заполнение массива данными;
2. поиск поездов по фамилии, имени, отчеству машиниста;
3. редактирование времени отправления поезда;
4. удаление поездов по полю "Направление";
5. сортировку по полю "Направление".
3.8.2 Таблица идентификаторов
№ Переменные Тип Значение
1 A array Заполнение массива
2 N integer Количество поездов
3 Nap string Поле направления
4 fio String Поле фамилии имя отчества
5 vy String Поле время отправления
6 i, j integer Параметры цикла
7 q integer Выбор действия
8 s1 string Новое время
9 x Rs Дополнительная переменная для сортировки
10 s String Время
11 w String Фамилия, Имя, Отчество машиниста
12 r String Направление поезда, которое удаляем
13 k Integer Номер удаляемой записи
14 f integer флажок
3.8.3 Блок-схема
3.8.4 Программа type RS=Record
Nap: string [40] ;
fio: string [40] ;
vy: string [10] ;
end;
var a: array [1. .50] of RS;
n, i,j,q,k,f: integer; s,s1,w,r: string; x: RS;
begin
Writeln ("введите kol poezdov");
readln (n);
for i: =1 to n do begin writeln ("введите Направление"," ", i," ","поезда");
readln (a [i]. Nap);
writeln ("введите Ф. И.О. "," ", i," ","машиниста");
writeln ("1-поиск поездов по фамилии, имени, отчеству машиниста");
writeln ("2-редактирование времени отправления поезда");
writeln ("3-удаление поездов по полю ");
writeln ("4-сортировку по полю ");
readln (q);
case q of
1: begin writeln ("ведите Ф. И.О. машиниста ");
readln (w);
f: =0;
for i: =1 to n do begin if a [i]. fio=w then begin writeln ("Направление ",a [i]. Nap," ","время ",a [i]. vy);
f: =1; end;
if f=0 then writeln ("таких нет");
end; end;
2: begin writeln ("введите время которое вы хотите поменять");
readln (s);
writeln ("введите время на которое вы хотите поменять");
readln (s1);
for i: =1 to n do begin if a [i]. vy=s then a [i]. vy: =s1;
end;
for i: =1 to n do begin writeln (i,’ ’,"машинист ",a [i]. fio," ","Направление ",a [i]. Nap);
writeln ("время ",a [i]. vy);
writeln;
end; end;
3: begin writeln ("введите Направление поезда, которое вы хотите удалить");
readln (r);
for i: =1 to n do begin if a [i]. Nap=r then k: =i;
for i: =1 to n do if ik then writeln (i,’ ’,"машинист ",a [i]. fio," ","Направление ",a [i]. Nap);
writeln ("время ",a [i]. vy);
end;
end;
4: begin for i: =1 to n-1 do for j: =1 to n do if a [i]. Nap>a [j]. Nap then begin x: =a [i] ;
a [i]: =a [j] ;
a [j]: =x;
end;
for i: =1 to n do begin writeln (i,’ ’,"машинист ",a [i]. fio," ","Направление ",a [i]. Nap);
writeln ("время ",a [i]. vy);
end;
end;
end;
readln;
end.
3.8.5 Результат работы программы
3.9 Решение задачи
3.9.1 Постановка задачи
Написать программу решения ребуса VOLVO FIAT=MOTOR.
3.9.2 Таблица идентификаторов
№ Переменные Тип Значение
1 v, o, l, f, i, a, t, m, r 0. .9 Параметры цикла
2 dig 0. .9 Множество цифр
3 Sum longint Сумма VOLVO FIAT
4 motor longint MOTOR
3.9.3. Блок-схема
3.9.4 Программа
Uses crt;
var v, o, l, f, i, a, t, m, r: 0. .9;
dig: set of 0. .9;
sum, motor: longint;
begin clrscr;
for v: =0 to 9 do begin include (dig,v);
for o: =0 to 9 do if not (o in dig) then begin include (dig,o);
for l: =0 to 9 do if not (l in dig) then begin include (dig, l);
for f: =0 to 9 do if not (f in dig) then begin include (dig,f);
for i: =0 to 9 do if not (i in dig) then begin include (dig, i);
for a: =0 to 9 do if not (a in dig) then begin include (dig,a);
for t: =0 to 9 do if not (t in dig) then begin include (dig,t);
for m: = 0 to 9 do if not (m in dig) then begin include (dig,m);
for r: =0 to 9 do if not (r in dig) then begin include (dig,r);
Sum: =v*10000 (o f) *1000 (l i) *100 (v t) *10 (o t);
Motor: =m*10000 o*1000 t*100 o*10 r;
if sum = motor then writeln (v,o,l,v,o," ",f, i,a,t,"=", m,o,t,o,r);
exclude (dig,r) end;
exclude (dig,m);
end;
exclude (dig,t);
end;
exclude (dig,a);
end;
exclude (dig, i);
end;
exclude (dig,f);
end;
exclude (dig,l);
end;
exclude (dig,o);
end;
exclude (dig,v);
end;
readln;
end.
3.9.5 Результат работы программы
3.10 Решение задачи
3.10.1 Постановка задачи
Дана строка символов s1, s2, …, sn. Известно, что среди s1, …, sn есть, по крайней мере одна запятая. Найти натуральное i такое, что si - последняя по порядку запятая.
3.10.2 Таблица идентификаторов
№ Переменные Тип Значение
1 v char запятая
2 s string Строка
3 i integer Параметр цикла
4 n integer Номер позиции
3.10.3 Блок-схема
3.10.4 Программа uses crt;
var v: char;
s: string;
i,n: integer;
begin clrscr;
writeln ("Vvedite stroky");
readln (s);
begin v: =",";
for i: =1 to length (s) do if s [i] =v then n: =i;
end;
writeln (n);
readln;
end.
3.10.5 Результат работы программы
Вывод
Я закрепила теоретические знания языка программирования на практике. Практические занятия используются для тщательного изучения содержательно-методических принципов построения программы, содержания и структуры прикладного программного обеспечения, обсуждения методики изучения отдельных тем курса с различными вариантами технического и методического обеспечения.
Список литературы
1. Немнюгин С.А. Turbo PASCAL С-П Изд-во Питер 2000.