Программирование на языке «Турбо-Паскаль»

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

Государственное образовательное учреждение

высшего профессионального образования

«ТОМСКИЙ  ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ» 
 

        Факультет ИДО

        Кафедра ОСУ

        Направление: Прикладная информатика в экономике 
         
         
         
         
         
         

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

по  «Информатике и программированию»

тема

«Программирование на языке «Турбо-Паскаль»» 
 
 
 
 
 
 
 

Выполнили: студенты гр.  З-8581  ____________  М. В. Рыболов 

Проверил              ____________  И. П. Степанова 
 
 
 
 
 
 
 
 
 
 
 
 

Томск 2009

 

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

Государственное образовательное учреждение высшего  профессионального образования

«ТОМСКИЙ  ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ» 

                                         Кафедра ОСУ 
 

ЗАДАНИЕ

на выполнение курсовой  работы 

    Студенту  гр. З-8581 М. В. Рыболову

1. Тема курсовой работы: “Программирование на языке Турбо-Паскаль”

2. Срок сдачи студентом готовой  работы: июня 2009 года.

3. Исходные данные к работе: задание на курсовою работу (вариант 14)

4. Содержание текстового документа  (перечень подлежащих разработке  вопросов)

    5. Дата  выдачи задания на выполнение курсовой работы: 2 февраля 2009 года. 
     
     

            Руководитель_______________ И.П. Степанова

            (подпись,  дата)  

            Задание принял к исполнению  

            __________________________ М. В. Рыболов

            (подпись,  дата) 
             
             

 

Реферат 

     Курсовая  работа 24 с., 6 рисунков, 3 приложения.

     Ключевые слова: Работа с файлами, Работа с массивами

     Цель  работы - разработка надежного и гибкого кода для требуемого комплекса программ.

     В результате исследования были созданы  и опробованы программы с учетом требований. 
 
 
 
 

 

Содержание 

 

Введение

 

      Программирование, как наука, всё шире и шире охватывает различные области нашей жизни. Но даже в  основе самых современных  языков программирования лежат базовые  принципы и понятия. В данной работе продемонстрированы базовые знания, с помощью языка программирования  «Турбо-Паскаль».

 

Глава 1. Постановка задачи

1.1. Задание с использованием итерационных циклов

 

     Спроектировать программу обработки членов ряда до члена ряда с заданной точностью (табл. 15), вывода требуемого результата и значения количества итераций (этапов) цикла.

     Для вычисления текущего члена ряда использовать рекуррентную формулу.

Таблица 1

1. Вычислить сумму  членов ряда:

   

до члена  ряда , где

1.2. Обработка элементов массива

 

     Спроектировать программы по обработке значений элементов массивов, задавая их значения в разделе констант (в Turbo Pascal – это CONST).

Таблица 2

1. Дан массив C(30). Подсчитать количество элементов и вывести номера их позиций, которые не попали в интервал значений [-3, 3].
2. Дан массив Z(20). Найти среднюю сумму отрицательных элементов и среднее произведение положительных элементов.
3. Дан массив Q(24). Осуществить в нём перестановку: в каждой тройке элементов на первое место поставить максимальное. Изменённый массив распечатать.
4. Заполнить матрицу  Q(7,7) следующим образом:

,

то есть по главной диагонали должны стоять нули, а остальные значения должны быть равны трём. Заполненную матрицу вывести на экран.

1.3. Файлы

 

      Составить программу обработки пяти записей  заданной структуры из созданного ранее файла во внешнем представлении (файл имеет в программе тип описателя TEXT).

      В программе создать новый файл во внутреннем представлении (файл имеет описатель FILE OF…), в который переписать часть записей по заданному условию.

Таблица 3

Ф.И.О. студента Вес (кг) Рост (см)
Нгуен Хонг Шон 64,5 170
 

      В новый файл вывести список студентов, вес которых больше 60 кг. Организовать изменение записи, удаление записи, создание записи через меню, с использованием процедур.

 

Глава 2. Реализация проекта

2.1. Основная схема  решения задания с использованием итерационных циклов

 

     Для решения задач подобного типа используем рекуррентную формулу. В нашем случае:

     запись  типа , приводим к виду

      , где  - предыдущее значение функции. Уравнение получившегося типа нетрудно реализовать в программном коде. Листинг программы приведён в приложении А. Результат работы программы приведён на рис. 1. 

Рис. 1

 

2.2. Основная схема  решения задач на элементы массива

 

     Решение задач подобного рода сводится к организации циклического перебора элементов массива. В случае с одномерными массивами обходимся одним циклом, в случае с двумерными – двумя (вложенный цикл). Листинг программ приведён в приложении Б. Результат работы программ приведён на рис. 2, рис.3, рис. 4 и рис. 5 соответственно.

Рис. 2

 

Рис. 3

 
 
 
 
 
 
 
 

Рис. 4

 

Рис. 5

2.3. Основная схема решения задач с файлами

 
 

     Прежде всего, необходимо понять, что такое файл. Любой файл имеет три характерные особенности. Во-первых, у него есть имя, что дает возможность программе работать одновременно с несколькими файлами. Во-вторых, он содержит компоненты одного типа. Типом компонентов может быть любой тип Паскаля, кроме файлов. Иными словами, нельзя создать «файл файлов». В-третьих, длина вновь создаваемого файла никак не оговаривается при его объявлении и ограничивается только емкостью устройств внешней памяти. Следует помнить, что физические файлы на магнитных дисках и переменные файлового типа в программе на Паскале – объекты различные. Переменные файлового типа в Паскале могут соответствовать не только физическим файлам, но и логическим устройствам, связанным с вводом/выводом информации. Например, клавиатуре и экрану соответствуют файлы со стандартными именами Input, Output.

     Как известно, каждый тип данных в Паскале, вообще говоря, определяет множество  значений и множество операций над  значениями этого типа. Однако над  значениями файлового типа Паскаля  не определены какие-либо операции, в том числе операции отношения и присваивания, так что даже такое простое действие, как присваивание значения одной файловой переменной другой файловой переменной, имеющей тот же самый тип, запрещено. Все операции могут производиться лишь с элементами (компонентами) файлов. Естественно, что множество операций над компонентами файла определяется типом компонент.

     Переменные  файлового типа используются в программе  только в качестве параметров собственных  и стандартных процедур и функций.

     Для работы с файлами используют следующие стандартные функции и процедуры:

       EOF (var F: File):Boolean,

где:  1) EOF ("End Of File" - "конец файла") - имя функции;

        2) F - имя переменной файлового типа.

Данная  функция является булевской функцией. Позволяет определить готовность файла к чтению, либо к записи информации. Если указатель файла продвинулся за конец файла (готовность к записи), то эта функция возвращает значение TRUE, во всех остальных случаях эта функция возвращает значение FALSE.  

   FilePos (var F: File of Type): Integer;

    FilePos (var F: File)        : Integer,

где:  1) FilePos ("File Position" - "позиция файла") - имя функции;

        2) F - имя переменной файлового типа.

Данная  функция (типа Integer) возвращает значение текущей позиции указателя файла. Номер первой компоненты файла равен.

 

  FileSize (var F: File of Type):Integer;

    FileSize (var F: File)        :Integer,

где: 1) FileSize ("File Size" - "размер файла") - имя функции;

        2) F - имя переменной файлового типа.

Данная  функция (типа Integer) возвращает размер файла, т.е. число компонентов файла. Если FileSize(F)=0, то файл является пустым.   Функции  FilePos() и FileSize() не применимы к текстовым файлам!  

      Assign (var F: File; Name: String);

    Assign (var F: File of Type; Name: String),

где: 1) Assign ("назначить") - имя процедуры;

        2) F - имя файловой переменной (логическое имя файла);

        3) Name - имя файла на диске (физическое  имя файла).  Name  -

строковое выражение, порождающее любое допустимое имя файла. Это имя

связывается с файловой переменной F, и в дальнейшем все операции с F будут производиться  над дисковым файлом Name. Данная процедура должна выполняться перед использованием файла! После выполнения этой процедуры Name и F отождествляются, т.е. отождествляются логическое и физическое имена файла. 

      Reset (var F: File),

где: 1) Reset ("переустановить") - имя процедуры;

      2) F - имя переменной файлового типа.

Процедура открывает файл F для чтения и  ставит указатель на начало первого  элемента файла (на элемент с номером 0). Файловая переменная F должна соответствовать уже существующему на диске файлу, иначе возникает ошибка: "I/О error" ("Input/Output error" - "ошибка ввода-вывода"). 

      Rewrite (var F: File),

где: 1) Rewrite ("установить на запись") - служебное слово;

       2) F - имя переменной файлового типа.

Процедура открывает файл F для записи, "очищает" его и помещает указатель на начало первого элемента файла. Существующий файл с данным именем будет уничтожен. Дисковый файл, организуемый с помощью процедуры Rewrite, создается пустым (не со- держащим элементов). 

      Read (var F: File of Type; var V: Type),

где: 1) Read ("читать") - имя процедуры;

       2) F - имя переменной файлового типа;

       3) V - имя переменной (или список  из  нескольких  переменных,

разделенных  запятыми),  совпадающей по типу с  типом элементов файла. Type.Каждая переменная считывается с дискового  файла, и после окончания чтения файловый указатель перемещается на следующую компоненту файла.  

      Write (var F: File of type; var V: Type),

где: 1) Write ("писать") - имя процедуры;

    2) F - имя переменной файлового типа;

       3) V - имя переменной (или список нескольких переменных, разделенных

запятыми), совпадающей по типу с типом элементов  файла Type. Каждая переменная записывается в дисковый файл, и после окончания операции записи файловый указатель перемещается на следующую компоненту файла. После окончания работы с файлом, он должен быть закрыт, иначе результат будет потерян. 

      Close (var F: File),

где: 1) Close ("закрыть") - служебное слово;

        2) F - имя переменной файлового типа.

Дисковый  файл, отождествленный с переменной F, закрывается и в каталог диска  вносятся необходимые изменения.  
 

      Seek (F,n),

где: 1) Seek ("искать") - имя процедуры;

       2) F - имя переменной файлового типа;

       3) n - целочисленное выражение.

Эта процедура  перемещает указатель файла на компоненту файла с номером n (номер первой компоненты файла равен 0).

     Truncate (var F),

где:1) Truncate - имя процедуры;

         2) F - имя переменной файлового типа.

Эта процедура   уничтожает часть файла от текущей позиции указателя до конца в Паскале. 

           С помощью вышеизложенных стандартных процедур и функций  составляем программу. Листинг программы  приведён в приложении В. Результат работы программы приведён на рис. 6. 
 
 
 
 
 
 
 
 
 
 
 

Рис. 6

 
 
 
 

       
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Заключение

 

      В ходе проделанной работы были рассмотрены  и использованы основные методы программирования на языке «Турбо Паскаль». Все программа работоспособны. Поставленные задачи выполнены. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Приложение  А

 

PROGRAM KURSIT1;

        VAR

        SUM,X,Y,Z,F,S,E:REAL;

        I,J:INTEGER;

        BEGIN

        E:=0.0001;

        WRITELN('Введи число X больше 1');

        READLN (X);

        I:=1;

        Y:=0;

        F:=1/X;

        SUM:=1/X;

        Z:=0;

        WHILE (ABS(F)>E) DO BEGIN

        I:=I+1;

        Y:=(2*(I-1)-1)/((2*I-1)*X*X);

        F:=Y*F;

        SUM:=SUM+F;

                             END;

        WRITELN('Значение функции F=',F:15:10,'    Сумма=',SUM:15:10,'  Количество=',I);

        READLN;

        END. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Приложение  Б

PROGRAM KURS1; 

        CONST C:ARRAY[1..30] OF INTEGER=(1,2,3,3,2,5,5,1,5,3,

                                      3,5,5,7,4,0,-1,-2,-5,-4,

                                      -3,0,0,4,5,1,5,4,9,5);

        VAR

        S:ARRAY[1..30] OF INTEGER;

        I,N:INTEGER;

        BEGIN

        N:=0;

        FOR I:=1 TO 30 DO BEGIN

        IF (C[I]<-3) OR (C[I]>3) THEN BEGIN

        N:=N+1;

        WRITELN(i,'-ый элемент = ',C[I]);

                                         END;

                         END;

        WRITELN('Количество =',N:2);

        READLN;

        END. 
 

PROGRAM KURS2; 

        CONST Z:ARRAY[1..20] OF INTEGER=(1,2,3,3,2,5,5,1,5,3,

                                      3,5,5,7,4,0,-1,-2,-5,-4);

        VAR

        I,ISUM,IPR:INTEGER;

        PR,SUM:REAL;

        BEGIN

        ISUM:=0;

        IPR:=0;

        SUM:=0;

        PR:=1;

       FOR I:=1 TO 20 DO BEGIN

        IF Z[I]>0 THEN BEGIN

        PR:=PR*Z[I];

        IPR:=IPR+1;

        END;

        IF Z[I]<0 THEN BEGIN

        SUM:=SUM+Z[I];

        ISUM:=ISUM+1;

                       END; 

PROGRAM KURS3; 

        CONST Q:ARRAY[1..24] OF INTEGER=(1,2,3,4,5,6,7,

                                         8,9,1,2,3,4,5,

                                         6,7,8,9,1,2,3,

                                         4,5,6);

        VAR

        I,K,L:INTEGER;

        BEGIN

        K:=0;

        L:=0;

        I:=3;

        WHILE I<=24 DO BEGIN

        IF Q[I]>Q[I-1] THEN BEGIN

           IF Q[I]>Q[I-2] THEN BEGIN

                               K:=Q[I];

                               L:=I;

                               END

                          ELSE BEGIN

                               K:=Q[I-2];

                               L:=I-2;

                               END;

                            END

                       ELSE

           IF Q[I-1]>Q[I-2] THEN BEGIN

                                 K:=Q[I-1];

                                 L:=I-1;

                                 END

                            ELSE BEGIN

                                 K:=Q[I-2];

                                 L:=I-2;

                                 END;

        Q[L]:=Q[I-2];

        Q[I-2]:=K;

        I:=I+3;

                       END;

        FOR I:=1 TO 24 DO WRITE(Q[I],',');

        READLN;

        END. 
 

PROGRAM KURS4; 

        VAR

        Q:ARRAY[1..7,1..7] OF INTEGER;

        I,J:INTEGER;

        BEGIN

        FOR I:=1 TO 7 DO BEGIN

         FOR J:=1 TO 7 DO BEGIN

         IF I=J THEN Q[I,J]:=0

                ELSE Q[I,J]:=3;

                          END;

                         END;

        FOR I:=1 TO 7 DO BEGIN

                      WRITELN;

         FOR J:=1 TO 7 DO

         WRITE(Q[I,J]);

        END;

        READLN;

END. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Приложение  В

PROGRAM kurs;

type

    FIO=string[20];

    VES=REAL;

    ROST=integer; 

    STUD=record

               STUDFIO:FIO;

               STUDVES:VES;

               STUDROST:ROST;

    end; 

var i,j,m,n,k,l:integer;

    BFile:file of STUD;

    BFile2:file of STUD;

    work:STUD;

    temp:STUD;

    vid:byte;

    End_menu:boolean;

    BD:string[20]; 

procedure name_file;

begin

     BD:='DAV.txt';

end; 

procedure Add_rec;

begin

     writeln('Запись номер  ',FilePos(BFile)+1);

     with work do

     begin

          write('FIO: ');

          readln(STUDFIO);

          write('VES: ');

          readln(STUDVES);

          write('ROST: ');

          readln(STUDROST);

          write(BFile,work);

     end;

end; 

procedure Create_new_file;

var ind, count:integer;

begin

     name_file;

     assign(BFile,BD);

     rewrite(BFile);

     write('Введи  количество записей: ');

     readln(count);

     for ind:=1 to count do

         Add_rec;

     close(BFile);

end; 

procedure Output_rec;

begin

     read(BFile,work);

     with work do

     begin

          write('Номер ',FilePos(BFile),'  ');

          writeln(STUDFIO ,'     ',STUDVES:4:1,'     ',STUDROST);

     end;

end; 

procedure Output_all_rec;

begin

     name_file;

     assign(BFile,BD);

     {$I-}

     reset(BFile);

     {$I+}

     if IOresult=0 then

     begin

          seek(BFile,0);

          while(not Eof (BFile))do

                    Output_rec;

          close(BFile);

     end

     else

         writeln('не могу найти файл ', BD);

Программирование на языке «Турбо-Паскаль»