Решение задач с помощью Turbo Pascal
Федеральное агентство по образованию РФ
Белгородский
государственный университет
Кафедра
«Энергетика теплотехнологий»
Курсовая работа
по дисциплине
«Информатика
Выполнила:
Студентка 1-го курса ЭФ ЭТ-11
Северинова А.А.
Принял:
к.т.н.,
доц. Щетинина И. А.
Белгород,
2010 г.
СОДЕРЖАНИЕ
Введение…………………………………………………………
Задание 1.
1.1. Постановка задачи ………………………………………………………..4
1.2. Блок-схема……………………..…………………………
1.3. Текст программы………...………………………
1.4. Результат работы…………………………..……
1.5. Описание работы программы……………
1.6. Анализ допущенных ошибок………………
Задание 2.
2.1. Постановка задачи………..……………………
2.2. Блок-схема…..……………………………………………
2.3. Текст программы……..……………………………
2.4. Результат работы……………………………………
2.5. Описание работы программы……………
2.6. Анализ допущенных ошибок………………
Заключение ……………………………………………………………………..24
Список
литературы…………...…………………………………
ВВЕДЕНИЕ
С помощью современных компьютеров можно решать различные математические и прикладные задачи. Одним из способов их решения является программирование алгоритмов решения на каком то языке программирования с последующим использованием этой программы в своих целях Turbo Pascal — это высокоуровневый язык программирования, разработанный Никлаусом Виртом в 1970 в качестве языка обучения структурному программированию. Особенностями языка являются строгая типизация и наличие средств структурного (процедурного) программирования. Паскаль был одним из первых таких языков. По мнению Н. Вирта, язык должен способствовать дисциплинированию программирования, поэтому, наряду со строгой типизацией, в Паскале сведены к минимуму возможные синтаксические неоднозначности, а сам синтаксис интуитивно понятен даже при первом знакомстве с языком. Целью работы является разработка программ на языке программирования Паскаль, а так же закрепление теоретических знаний по данной дисциплине.
ЗАДАНИЕ 1
1.1.Постановка задачи
Составить
программу вычисления значений функции
F(x) на отрезке [a,b] в точках xi= a + hi,
где h – шаг вычисления функции; m – количество
шаговб с помощью трех циклов: с параметром,
с предусловием, с постусловием. Использовать
подпрограммы: функцию – для вычисления
значения F(x), процедуру для вывода результатов
на печать(экран или принтер по желанию
пользователя).
Функция F(x) = tg(x/2)+cos(x);
m =20;
отрезок вводится с клавиатуры;
Циклы for, while, repeat.
1.2.Блок-схема
1.3.Текст программы
program kursovic_1;
uses crt, printer;
label 1,2,9;
const m=20;
var t:text;
a,b,c,h,x,y:real;
i,n,letter:integer;
OK,r:boolean;
k:char;
function F(x:real):real;
begin
y:=sin(x/2)/cos(x/2)+cos(x);
if cos(x/2)=0 then x:=x+h;
end;
procedure print;
begin
writeln (' при x=',x:2:2,' y=',y:2:2);
end;
begin
clrscr;
highvideo;
textattr:=green+16*blue;
window (0,0,80,25);
clrscr;
gotoxy (33,9);
write('Курсовая работа');
gotoxy(19,11);
write('на
тему:"Программирование на
gotoxy(24,13);
write('студентки 1-го курса группы ЭТ-11');
gotoxy(30,15);
write('Сухорословой Виктории');
gotoxy(34,20);
textcolor(red);
write('нажмите
любую клавишу для продолжения.
readkey;
clrscr;
textattr:=yellow+16*black;
window(0,0,80,25);
clrscr;
gotoxy(36,9);
write('ЗАДАНИЕ');
gotoxy(18,10);
write('составить программу вычисления значений функции');
gotoxy(20,11);
write(' f(x)=sin(x/2)/cos(x/2)+cos(x) на отрезке');
gotoxy(3,12);
write('[a,b] в точках x=a+h, где h=(b-a)/m, m-заданное число. Использовать');
gotoxy(4,13);
write('подпрограммы: для вычисления значения f(x), процедуру для вывода ');
gotoxy(7,14);
write('результатов на печать (экран или принтер, по желанию пользователя)');
gotoxy(35,20);
textcolor(white);
write('нажмите
любую клавишу для прододжения.
readkey;
clrscr;
textattr:=white+16*blue;
window(0,0,80,25);
begin
clrscr;
begin
1:;
OK:=true;
clrscr;
gotoxy(4,9);
write('выберите оператор, с помощью которого будет считаться функция');
gotoxy(18,10);
write('y=sin(x/2)/cos(x/2)+
gotoxy(23,11);
writeln('1 - оператор цикла с параметром');
gotoxy(23,12);
writeln('2
- оператор цикла с предусловием'
gotoxy(23,13);
writeln('3
- оператор цикла с постусловием'
read(letter);
clrscr;
textattr:=yellow+16*black;
window(0,0,80,25);
gotoxy(28,9);
write('введите первый предел a=');
read(a);
gotoxy(28,10);
write('введите второй предел b=');
read(b);
if a>b then begin
c:=b;
b:=a;
a:=c;
end;
h:=(b-a)/m;
if (letter=1) then
begin
clrscr;
gotoxy(25,8);
write('таблица табуляции');
for i:=0 to m do
begin
x:=a+i*h;
F(x);
gotoxy(20,9+i);
print;
end;
readkey;
end;
if (letter=2) then
begin
clrscr;
i:=0;
gotoxy(25,8);
write('таблица табуляции');
while (i<=m) do
begin
x:=x+h*i;
F(x);
gotoxy(20,9+i);
print;
i:=i+1;
end;
readkey;
end;
if (letter=3) then
begin
clrscr;
i:=0;
gotoxy(25,8);
write('таблица табуляции');
repeat
begin
x:=a+h*i;
i:=i+1;
F(x);
gotoxy(20,10+i);
print;
end;
until (i>m);
readkey;
goto 9;
readkey;
end;
end;
9:;
clrscr;
textattr:=black+16*white;
window(0,0,80,25);
gotoxy(22,11);
write('вывести на принтер?: ДА/Нет, т.е. d/n');
readln(k);
if k='d' then
begin
assign(t,'prn');
write (t, 'при x=',x:2:2,' y=',y:2:2);
end;
if k='n' then goto 2;
2:;
OK:=false;
clrscr;
textattr:=black+16*yellow;
window(0,0,80,25);
gotoxy(22,11);
write('повторить расчет?: Да/Нет, т.е. d/n');
k:=readkey;
case k of 'd':goto 1;
'n':halt;
end;
end;
end.
1.4.Результаты работы программы
С параметром:
С предусловием:
С постусловием:
1.5.Описание работы программы
Программа вычисляет значения функции f(x)=sin(x/2)/cos(x/2)+cos(x) на промежутке [a;b] c количеством шагов m=20. Для решения задачи было предложено 3 способа: с помощью оператора цикла с параметром, с предусловием или с постусловием. После вывода результата на экран была представлена возможность печати на принтере или повторного расчета программы.
Зная число m и вводимые с клавиатуры границы, программа вычисляет сам шаг от которого зависит аргумент.
Оператор цикла for удобен лишь в том случае если число повторений известно к началу его выполнения.
For (от) x:=1 to (до) m do (выполняется)…;
Оператор цикла repeat более удобный, так как к началу выполнения программы необязательно знать количество повторений, а завершается она тогда, когда аргумент впервые примет значение true.
Repeat (повторять) оператор1 until (до)логическое выражение оператор2;
Оператор цикла while…do переводиться как «делать…пока». Выполнение цикла завершается тогда, когда оператор впервые примет значение false.
While(пока)
условие do(делать) оператор;
Анализ допущенных ошибок
1. 35: Label identifier expected
Требуется идентификатор метки.
2. 37: END expected
Требуется END
3. 50: DO expected
Требуется оператор DO.
4. 81: Label already defined
Данная метка уже определена.
5. 85: ";" expected
Требуется указать ";".
6. 86: ":" expected
Требуется указать ":".
ЗАДАНИЕ 2
2.1.Постановка задачи
Написать программу, считывающую в ряд
не более 20 чисел и просматривающую все
заполненные элементы ряда; если элемент
положительный или равен нулю, то он пересылается
в ряд «pos», если отрицательный – то в ряд
«neg». Распечатать все 3 ряда.
2.3.Текст программы
Program massiv;
uses crt;
label 1,2,3;
const n=20;
var
a:array[1..n] of real;
pos:array[1..n] of real;
neg:array[1..n] of real;
i,j,l,m:integer;
k:char;
t:text;
begin
clrscr;
highvideo;
textattr:=yellow+16*red;
window (0,0,80,25);
clrscr;
gotoxy (33,9);
write('Курсовая работа');
gotoxy(19,11);
write('на тему:"Программирование на языке Pascal"');
gotoxy(24,13);
write('студентки 1-го курса группы ЭТ-11');
gotoxy(32,15);
write('Сухорословой Виктории');
gotoxy(34,20);
textcolor(blue);
write('нажмите любую клавишу для продолжения...');
readkey;
textattr:=black+16*white;
window(0,0,80,25);
clrscr;
gotoxy(36,9);
write('ЗАДАНИЕ');
gotoxy(3,11);
write('написать программу, считывающую в ряд не более');
gotoxy(3,12);
write('20 чисел и просматривающую все заполненные элементы ряда;');
gotoxy(4,13);
write('если элемент положительный или равен 0, то он');
gotoxy(7,14);
write('пересылается в ряд "pos", если отрицательный, то в ряд "neg"');
gotoxy(13,15);
write('распечатать все 3 ряда');
gotoxy(35,20);
textcolor(blue);
write('нажмите любую клавишу для продолжения...');
readkey;
textattr:=black+16*yellow;
window(0,0,80,25);
1:;
clrscr;
begin
writeln('исходный массив');
for i:=1 to n do read(a[i]);
clrscr;
writeln('Отсортированный массив');
for i:=1 to n do
begin
if a[i]>=0 then
begin
j:=j+1;
pos[j]:=a[i];
end
else
begin
l:=l+1;
neg[l]:=a[i]
end;
end;
writeln('исходный массив');
for i:=1 to n do write(a[i]:2:1,' ');
writeln;
writeln('положительный массив');
for m:=1 to j do write(pos[m]:2:1,' ');
writeln;
writeln('отрицательный массив');
for m:=1 to l do write(neg[m]:2:1,' ');
writeln;
readkey;
clrscr;
textattr:=black+16*yellow;
window(0,0,80,25);
gotoxy(22,11);
write('вывести на принтер?: Да/Нет, т.е. d/n');
readln(k);
if k='d' then
begin
assign(t,'prn');
write (t,a[i]:2:0,' ');
end;
if k='n' then goto 3;
3:;
clrscr;
textattr:=green+16*yellow;
window(0,0,80,25);
gotoxy(22,11);
write('повторить расчет?: Да/Нет, т.е. d/n');
k:=readkey;
case k of 'd':goto 1;
'n':halt;
end;
end;
end.
2.4.Результаты
работы программы
2.5.Описание работы программы
Программа выводит исходный массив, который
включает в себя не более 20 элементов.
Далее, анализируя данные исходного массива,
компьютер отбирает положительные или
равные 0 значения элементов и отправляет
их во второй массив «pos», остальные –
в третий массив «neg». Таким образом программа
наглядно отображает все 3 массива, что
позволяет проверить правильность написания
программы.
2.6.Анализ допущенных ошибок
1. 26: Type mismatch
Несоответствие типов.
2. 37: END expected
Требуется END
3. 50: DO expected
Требуется оператор DO.
4. 86: ":" expected
Требуется указать ":".
5. 85: ";" expected
Требуется указать ";".
6. 90: "=" expected
Требуется указать "=".
ЗАКЛЮЧЕНИЕ
В данной курсовой работе рассмотрено две разновидности программ, которые позволяют получить практические навыки в различных областях Pascal. Структура решения этих задач представлена двумя способами: блок-схемой и на языке программирования. Первый оказался более наглядным.
В ходе разработки программ
были допущены некоторые
СПИСОК ЛИТЕРАТУРЫ
1. Павловская, Т.А., Паскаль. Программирование на языке высокого уровня: Учебник для вузов – СПб.:Питер, 2004. – 393с.:ил.
2. Алексеев, Е.Р., Турбо Паскаль 7.0 / Алексеев Е.Р., Чеснокова О.В. – М.: НТ Пресс 2006. – 314, [6] c.: ил. – (Самоучитель).
3. Потопахин, В.В., Turbo Pascal. Решение сложных задач: Учебное пособие для вузов – СПб.:Питер, 2003. – 256с.