Решение задач с помощью Turbo Pascal

 

Федеральное агентство по образованию РФ

Белгородский  государственный университет им. В. Г. Шухова

Кафедра «Энергетика теплотехнологий» 
 
 
 
 
 
 
 

Курсовая  работа

по дисциплине «Информатика 
 
 
 

Выполнила:

Студентка 1-го курса ЭФ ЭТ-11

Северинова  А.А.

Принял:

к.т.н., доц. Щетинина И. А. 
 
 

Белгород, 2010 г. 
 

 

СОДЕРЖАНИЕ

   Введение…………………………………………………………………….......3

Задание 1.

   1.1. Постановка задачи  ………………………………………………………..4

   1.2. Блок-схема……………………..…………………………………………...5

   1.3. Текст программы………...………………………………………………....6

   1.4. Результат работы…………………………..……………………………...12

   1.5. Описание работы программы……………..…………………………......13

   1.6. Анализ допущенных ошибок………………………..…………………...14 

Задание 2.

   2.1.  Постановка задачи………..………………………………………………15

   2.2.  Блок-схема…..…………………………………………………………….16

   2.3.  Текст программы……..…………………………………………………..17

   2.4. Результат работы………………………………………………………….21

   2.5. Описание работы программы…………………………………………….22

   2.6. Анализ допущенных ошибок………………………………………….....23

Заключение ……………………………………………………………………..24

Список  литературы…………...………………………………………………..25 
 
 
 
 
 
 
 
 
 

 

ВВЕДЕНИЕ

С помощью  современных компьютеров можно  решать различные математические и  прикладные задачи. Одним из способов их решения является программирование алгоритмов решения на каком то языке программирования с последующим использованием этой программы в своих целях 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('на  тему:"Программирование на языке  Pascal"');

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)+cos(x)');

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.2.Блок-схема программы

 

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с.