Решение задач на языке высокого уровня Pascal
Для программной обработки с помощью компьютера данные представляются в виде величин и их совокупностей. Величина — это элемент данных с точки зрения их семантического (смыслового) содержания или обработки. Смысловое (семантическое) разбиение данных производится во время постановки задачи и разработки алгоритма ее решения (входные, выходные и промежуточные). Исходные (входные, аргументы) — это… Читать ещё >
Решение задач на языке высокого уровня Pascal (реферат, курсовая, диплом, контрольная)
Курсовая работа
по дисциплине «Программирование»
Тема: «Решение задач на языке высокого уровня Pascal»
Реферат Ключевые слова: Цикл, текстовая строка, двумерный массив, текстовый файл, машинная графика, запись.
Объект исследования — Язык программирования высокого уровня Pascal.
Цель работы — изучить способы написания программ на языке Паскаль и закрепление теоретических и практических навыков в решении прикладных задач.
Выводы: При выполнении курсовой работы были изучены основные конструкции языка высокого уровня Паскаль, такие как, циклы, условия, процедуры, функции, массивы, строки и т. д.
Паскаль предоставляет достаточные средства для написания программ по заданному алгоритму для решения практически любых задач.
Введение
Для программной обработки с помощью компьютера данные представляются в виде величин и их совокупностей. Величина — это элемент данных с точки зрения их семантического (смыслового) содержания или обработки. Смысловое (семантическое) разбиение данных производится во время постановки задачи и разработки алгоритма ее решения (входные, выходные и промежуточные). Исходные (входные, аргументы) — это данные, известные перед выполнением задачи, из ее условия. Выходные данные (результаты) — результат решения задачи. Переменные, которые не являются ни аргументом, ни результатом алгоритма, а используются только для обозначения вычисляемого промежуточного значения, называются промежуточными. Необходимо указывать имена и типы данных — целый, вещественный, логический и символьный.
Имена в языках программирования принято называть идентификаторами. Есть идентификаторы переменных, констант, типов, функций и т. д.
С понятием величины связаны следующие характеристики (атрибуты):
· идентификатор — это ее обозначение и место в памяти;
· тип — множество допустимых значений и множество применимых операций к ней;
· значение — динамическая характеристика, может меняться многократно в ходе исполнения алгоритма. Во время выполнения программы в каждый конкретный момент величина имеет какое-то значение или не определена.
Постоянной называется величина, значение которой не изменяется (поскольку такое изменение запрещено) в процессе исполнения алгоритма, а остается одним и тем же, указанным в тексте алгоритма. Переменной называется величина, значение которой меняется (в общем случае, может изменяться) в процессе исполнения алгоритма.
Тип выражения определяется типами входящих в него величин, а также выполняемыми операциями. В языке Pascal тип величины задают заранее, т.к. все переменные, используемые в программе, должны быть объявлены в разделе описания с указанием их типа.
Различают переменные следующих простых типов: целые (Integer, Byte, ShortInt, Word, LongInt), вещественные (Real, Double, Single, Extended), логический (Boolean), символьный (Char), перечисляемый, диапазонный (интервальный).
В целом, иерархия типов в языке Pascal следующая (Рисунок 1.1):
Рисунок 1.1 — Иерархия типов в языке Pascal
Задание 1. Обработка текстовых строк массив файл графика паскаль Найти количество регулярных цепочек во всех словах, состоящих только из символов букв и цифр, и напечатать их. Напечатать в перевернутом виде слова, содержащие подобные цепочки, если длина цепочки не превышает 6 символов.
Блок-схема
Алгоритм:
Создаем два массива A и B типа string. Тип данных (string) определяет строки с максимальной длиной 255 символов. Переменная этого типа может принимать значения переменной длины. Так же вводим несколько переменных для выполнения данной программы типа integer. Тип integer один из простейших и самых распространённых типов данных в языках программирования. Тип данных (integer) cлужит для представления целых чисел. Множество чисел этого типа представляет собой подмножество бесконечного множества целых чисел, ограниченное максимальным и минимальным значениями.
Для ввода с клавиатуры последовательности используем оператор
read (s); {ввод последовательности слов}
Для удобства работы с этой последовательностью символов каждое слово вносим в отдельную ячейку массива символьного типа.
Выводим этот массив для проверки правильности вывода слов.
Выводим слова, в которых есть только числа. Для этого используем оператор case. Этот оператор проверяет каждый символ в слове и если найдет цифры от 0 до 9 то переменной n присвоит значение 1. Аналогично выводим слова в которых есть только знаки. Оператор case найдя буквы от, А до Я присваивает переменной m значение 1.
Далее выводим на экран слова в которых только числа и переворачиваем их. Проверяем переменную n, если она не равна 0, а переменная m так и осталась 0, то значит в этом слове только числа.
Аналогично выводим на экран слова в которых только знаки и переворачиваем их. Проверяем переменную m, если она не равна 0, а переменная n так и осталась 0, то значит в этом слове только знаки.
В итоге получаем код нашей программы (см. приложение А).
Работа и интерфейс программы:
Перед началом ввода текстовой строки мы должны ознакомиться с условиями и только после этого, учитывая их, вводить строку.
Слова в последовательности разделены одним или несколькими пробелами. В состав каждого слова могут входить:
· Арабские буквы, как большие, так и малые.
· цифры от 0 до 9,
· символы знаков: <+> <-> <:> <*> <.> </> <=>.
Длина одного слова не превышает 20 символов.
Ввод осуществляется при помощи клавиатуры и подтверждается (принимается) нажатием клавиши Enter. Важно помнить если ввод будет неправильным, неудовлетворяющий всем условиям, то программа будет работать неправильно.
Рисунок 2.1 — Ввод текстовой строки.
После ввода текстовой строки, программа выполняет операции, указанные в данной команде, соответственно нашему заданию.
Рисунок 3.1 — Реализация команд.
Задание 2. Обработка и модификация двумерных массивов
Квадратный массив, элементами которого являются английские буквы или символ пробела, заполнен кроссвордом. Напечатать все слова в кроссворде с чередующимися гласными и согласными буквами и их количество.
Задание 3. Файловые структуры данных. Текстовые файлы
Вывести на экран дисплея количество ЧИСЕЛ, обнаруженных в исходном файле, их общую сумму, пропуская числа, которые заключены между парами указываемых в диалоге начальных и конечных слов. Оставшиеся числа переписать в другой файл.
Блок — схема:
Алгоритм:
Для начала, зададим имя программы, подключим модуль работы с экраном, сделаем описание переменных.
Далее создаем два файла file1.txt. В первый файл будет записываться текстовые строки, которые мы введем с клавиатуры. В File2. txt будет записываться полученный результат по завершению программы.
Вводим с клавиатуры начальное и конечное число, согласно заданию, которые не нужно использовать далее в программе.
Далее используем функцию определения достижения конца файла в Паскале Название этой функции является сложносокращенным словом от end of file. Значение этой функции имеет значение true, если конец файла уже достигнут, т. е. указатель стоит на позиции, следующей за последней компонентой файла. В противном случае значение функции — false.
Выводим количество ЧИСЕЛ, обнаруженных в исходном файле, их общую сумму, пропуская числа, которые заключены между парами указываемых в диалоге начальных и конечных слов. Но существует одна проблема программа не будет работать т. к числа обнаруженные в исходном файле символьного типа, а мы можем делать вычислительные действия с типом integer.
Чтобы исправить это используем процедуру val, она преобразовывает строковое значение в его числовое представление.
Выводим полученные значения и записываем их во второй файл.
В итоге получаем конечный код программы (см. приложение В).
Работа и интерфейс программы:
Предварительно для нашего задания мы должны создать два файла file. txt file2.txt, чтобы в будущем мы могли работать с этими файлами.
Согласно нашему заданию мы должны ввести текст с которым в дальнейшем будем работать.
Далее мы вводим в диалоговом окне начальное и конечное слово, в пределах которого мы будем пропускать числа.
Рисунок 3.1- Ввод данных
Рисунок 3.2 — Результат
Задание 4. Элементы машинной графики
На экране построить семейство кривых (Эпициклоида), заданных функцией:
X = (1+A)· cos (A·t)+R·cos (1+A)·t; [ 0 <= t <= 2· pi ]
Y = (1+A)· sin (A·t)-R·sin (1+A)·t;
Группа параметров A, R для построения семейства дана в текстовом файле.
Блок — схема:
Алгоритм:
Поскольку тема нашей курсовой «Элементы машинной графики», нам нужно заострить особое внимание на этом задании, и выполнить это задание наиболее специфично. Поскольку в Паскале ABC, в отличие, к примеру, от Турбо Паскаля, множество дополнительных модулей, особенно дополнительных графических модулей, мы как раз воспользуемся одним из них.
Начнем с названия программы, подключения модулей и описанию констант, согласно нашему заданию.
Где «Crt» дополнительный графический модуль. Модуль Crt позволяет выводить цветные символы на цветном экране. Хотя по-прежнему отображение будет происходить в текстовом режиме.
Теперь приступим к описанию построения графика, в которой будет у нас находиться, помимо построения самого графика, построение осей координат, считывание переменных из файла.
Для начала считаем данные из файла. Но перед этим создадим файл data3. txt и откроем этот файл для чтения, после чего закроем.
Далее переходим к построению графика (Эпициклоида).
Где «t:=t+0.01» шаг, «x» и «y» наши стандартные функции по заданию.
Важно знать, что если шаг будет большим, то график получиться мало-угольным, не плавным, но чем меньше будет шаг, тем потребуется времени для построения графика, даже самым мощным компьютерам потребуется несколько пар секунд чтобы построить график c минимальным шагом.
В итоге получаем конечный код программы (см. приложение Г).
Работа и интерфейс программы
Предварительно для нашего задания мы должны создать файл data3. txt, записать туда данные, а именно параметры A, R через пробел для построения графика.
Рисунок 4.1 — Заполнение файла
В зависимости от введенных параметров, программа будет строить и выводить график в графическое окно (см. Рисунок 4.2).
Рисунок 4.2 -Работа графического окна
Задание 5. Записи
Написать программу, которая формирует файл записей данной структуры Type Kniga=Record Avtor: String; Nazvanie: String; God: Integer; Izdatel: String; Stranizy: Integer; End; и определяет: — есть ли книги данного автора; - книгу с наибольшим количеством страниц; - названия книг данного автора, изданных с указанного года, в данном издательстве.
Блок — схема:
Алгоритм:
Для начала зададим имя программ. Подключим модуль работы с экраном. Опишем запись. В языке Паскаль запись определяется путем указания служебного слова record и перечисления входящих в запись элементов с указанием типов этих элементов.
Сделаем описание переменных.
Далее для ввода в диалоговом окне данных создаем цикл из n=10.
Далее работаем с полученным массивом. Согласно заданию ищем, есть ли книги данного автора. Вводим с клавиатуры автора интересующей нас книги и присваиваем ей значение «avt». Далее он сравнивает «avt» с авторами которые содержатся в нашем массиве.
Согласно задание нужно найти книгу с наибольшим количеством страниц. Для этого в цикле сравниваем с максимальным значением каждую книгу.
Далее требуется найти названия книг данного автора, изданных с указанного года, в данном издательстве.
В итоге получаем код программы (см. Приложение Д)
Работа и интерфейс программы
Ввод осуществляется при помощи клавиатуры и подтверждается (принимается) нажатием клавиши Enter. Все данные должны вводиться согласно условию, сказанному в задание и дублированному на экране (см. рисунок 5.1).
Рисунок 5.1 — Ввод данных
После того как мы ввели все данные выполняем все условия указанные в задании. Выполняем поиск
— есть ли книги данного автора;
— книгу с наибольшим количеством страниц;
— названия книг данного автора, изданных с указанного года, в данном издательстве. (см. Рисунок 5.2)
Рисунок 5.2 — Результат
Заключение
В ходе выполнения курсовой работы были разработаны и реализованы, программы для работы с текстовой строкой, двумерным массивом, файлами, машинной графикой, записями.
При выполнении курсовой работы были изучены основные конструкции языка высокого уровня Паскаль, такие как, циклы, условия, процедуры, функции, массивы, строки и т. д.
Паскаль предоставляет достаточные средства для написания программ по заданному алгоритму для решения практически любых задач.
Список используемой литературы
1. Немнюгин С. А. — Turbo Pascal. Программирование на языке высокого уровня, СПб.: Питер, 2012, 496 с.
2. Рапаков Г. Г., Ржеуцкая С. Ю. — Программирование на языке Pascal, СПб.: БХВ-Питербург, 2009, 480 с.
3. Окулов С. М. — Основы программирования, М.:БИНОМ. Лаборатория знаний, 2010, 424 с.
4. С. Н. Лукин — Turbo Pascal 7.0. Самоучитель, Диалог — МИФИ, 1999, 211 с.
5. Ерёмин О. Ф. — Методическое пособие по программированию на языке Pascal ABC, Моздок, 2009, 49 с.
Приложения Приложение, А Код программы к заданию 1
program A1;
uses crt;
var s: string;
A:array [1.20] of string;
B:array [1.10] of string;
i, j, max, r, k, l, n, m: integer;
begin
read (s); {ввод последовательности слов}
r:=1;
for i:=1 to length (s) do
if s[i]=' ' then
begin
j:=j+1;
A[j]: =copy (s, r, i-r);
r:=i+1;
end; {Каждое слово вносится в отдельную ячейку массива символьного типа}
for i:=1 to j do
writeln ('A[', i,']=', A[i]);
{Массив выводится для проверки}
For i:=1 to j do
begin
m:=0;
n:=0;
for l:=1 to length (A[i]) do
case A[i][l] of
'0'.'9': n:=1;
'а'.'я': m:=1;
end;
if (n<>0) and (m=0) then begin
writeln ('только числа в слове «', A[i],'» ');
for j:=length (A[i])downto 1 do
write (A[i][j]);
writeln;
end;
if (m<>0) and (n=0) then begin
writeln ('только знаки в слове «', A[i],'» ');
for j:=length (A[i])downto 1 do
write (A[i][j]);
writeln;
end;
end;{Выводим слова, в которых есть либо только числа, либо только знаки и переворачиваем их}
end.
Приложение Б Код программы к заданию 3
Program A3;
uses crt;
const c=['0','1','2','3','4','5','6','7','8','9'];
var
f1,f2:text;
a:array[1.99] of string;
b:array[1.99] of integer;
s, s1: string;
r1,r2:real;
i, j, k, x, g, v, s2:integer;
begin
assign (f1,'file1.txt');
assign (f2,'file2.txt');
Rewrite (f1);
write ('vvedite text: ');readln (s);
write (f1,s);
write ('начальное слово: ');
readln (r1);
write ('конечное слово: ');
readln (r2);
Reset (f1);
while not eof (f1) do readln (f1,s);
j:=1;
for i:=1 to length (s) do
begin
if (s[i]<>' ') and (s[i] in c) then
begin
a[j]: =a[j]+s[i];
end
else inc (j);
end;
x:=j;
i:=0;
s2:=0;
for j:=1 to x do
begin
s1:=a[j];
val (s1,v, g);
if (v>r1) and (v
begin
inc (i);
b[i]: =v;
end
else begin
s2:=s2+v;
k:=k+1;
end;
end;
writeln;
writeln ('Кол-во чисел: ', k);
for j:=1 to x do writeln (a[j]);
writeln;
writeln ('Сумма чисел: ', s2);
Rewrite (f2);
for i:=1 to k do write (f2,b[i],' ');
close (f1);
Приложение В Код программы к заданию 4
program A4;
uses GraphABC, crt;
const p=3.14;
var x, t, y, A, R, m: real;
n:byte;
l:text;
Q:array [1.4] of real;
begin
setwindowsize (600,600);
line (300,0,300,600);
line (0,300,600,300);
assign (l,'data3.txt');
reset (l);
for n:=1 to 4 do
begin
readln (l, m);
Q[n]: =m;
end;
A:=Q[1];
R:=Q[2];
t:=0;
while t<2*p do
begin
x:=(1+A)*cos (A*t)+R*cos (1+A)*t;
y:=(1+A)*sin (A*t)+R*sin (1+A)*t;
circle (trunc (x*20+300), trunc (y*20+300), 2);
t:=t+0.01;
end;
close (l);
end.
Приложение Г Код программы к заданию 5
Program А5;
Uses Crt;
Const n=10;
Type kniga = record
Avtor, Nazvanie, Izdatel: string[20];
God:integer;
Stranizy:real;
end;
Var a: array[1.n] of kniga;
i :byte;
avt:string;
naz:string;
izd:string;
max:real;
g:integer;
begin
ClrScr;
for i:=1 to n do
with a[I] do
begin
Writeln ('Введите автора ', I);
Readln (Avtor);
Writeln ('Название книги');
Readln (Nazvanie);
Writeln ('Издательство');
Readln (Izdatel);
Writeln ('Год издания');
Readln (god);
Writeln ('Кол-во страниц');
Readln (Stranizy);
end;
Writeln;
Writeln ('Введите автора интересующей книги');
Readln (avt);
for i:=1 to n do
with a[I] do
if avtor=avt then writeln (avtor,' «', Nazvanie,'», ', izdatel,' ', god,'г. ', stranizy,'стр.');
Readln;
Writeln ('Книга с наибольшим кол-ом страниц');
max:=0;
for i:=1 to n do
with a[I] do
if stranizy>max then begin
max:=stranizy;
naz:=Nazvanie;
end;
write (Naz,' ', max,'стр.');
Readln;
Writeln ('Введите автора интересующей книги');
Readln (avt);
Writeln ('Укажите год издания');
Readln (g);
Writeln ('Укажите Издательство');
Readln (izd);
for i:=1 to n do
with a[I] do
if (avt=avtor) and (g=god) and (izd=Izdatel) then writeln ('Книга «', Nazvanie,'», ', stranizy,'стр.');
Readln;
end.