Программирование в среде TurboPascal (создание программы, реализующей алгоритм решения системы трех линейных уравнений)

Страницы работы

12 страниц (Word-файл)

Содержание работы

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

"САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ"

Инженерно-строительный факультет

Кафедра возобновляющихся источников энергии и гидроэнергетики

Отчёт по лабораторной работе № 6

Дисциплина: Информатика

Тема: “Программирование в среде TurboPascal

Выполнил студент группы 1013/1                                  А.Н. Рыльков

Принялк.т.н.                                                                    А.А. Панфилов

“”2010г.

Санкт-Петербург

2010

Оглавление

1      ЦЕЛЬ РАБОТЫ.. 2

2      СОЗДАНИЕ НОВОЙ ПРОГРАММЫ.. 2

3      ВВОД ДАННЫХ И ЗАПОЛНЕНИЕ МАССИВОВ.. 2

3.1     Ввод данных с клавиатуры.. 2

3.2     Чтение данных из файла. 2

4      РЕШЕНИЕ МАТРИЦЫ.. 2

5      ВЫВОД ДАННЫХ.. 2

6      Зацикливание программы.. 2

7      ВЫВОД.. 2

8      ПРИЛОЖЕНИЕ. 2


1  ЦЕЛЬ РАБОТЫ

Цель данной работы — освоить и изучить на базовом уровне один из языков программирования, а именно Pascal. Основной задачей является создание программы, реализующей алгоритм решения системы трех линейных уравнений. На этом примере мы изучим такие основы Turbo Pascal, как:

·  Работа в программной среде Паскаль

·  Некоторые стандартные операторы и циклы

·  Работа с массивами

·  Работа с текстовыми файлами

Всю нашу программа можно разбить на несколько элементарных задач:

1.  Создание новой программы

2.  Ввод данных и заполнение массивов

3.  Решение матрицы

4.  Вывод данных

5.  Зацикливание программы

На этих пяти главах и построен весь отчёт.

2  СОЗДАНИЕ НОВОЙ ПРОГРАММЫ

Для создания программы нужен компилятор, в нашем случае это Borland Turbo Pascal — один из простейших компиляторов, поддерживаемых интересующий нас язык программирования. Итак, запустив Borland Turbo Pascal мы сразу видим чистый синий лист для создания новой программы.

Как и любая другая, наша программа имеет определённую структуру и начинается со своего имени и описания всех используемых переменных:

Program matrica;

var a:array[1..3,1..3] of integer;

    b:array[1..3] of integer;

    x:array[1..3] of real;

    i,j: integer;

    q,w:char;

    o, o1, o2, o3: real;

    f,t : text;

Переменные a,b,x описываются как массивы; i,j – переменные, которым можно присваивать любые целые числа; q,w - переменные, которым можно присваивать символы; o, o1, o2, o3 - переменные, которым можно присваивать любые вещественные числа; f,t – переменные текстового типа.

Дальше следует слово BEGIN, которое говорит о начале программы, а после него основной текст, который заканчивается словом END. символ «.» (точка) объявляет конец программы.

3  ВВОД ДАННЫХ И ЗАПОЛНЕНИЕ МАССИВОВ

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

1.  Ввод с клавиатуры

2.  Чтение данных из текстового файла

В программе предусмотрена возможность выбора любого из вышеперечисленных способов, она организуется так:

  q:=' ';

    Writeln('Ввод данных из файла?  (y/n)');

    Readln(q);

    If q='n' then

    BEGIN

q – переменная и в зависимости от её значения будет выбран способ ввода данных, то есть значение переменной q это символ n, то программа будет осуществлять  ввод данных с клавиатуры, если значение q любой другой символ, то будет производиться чтение данных из файла, основной оператор этого участка Ifthenelse .

Рассмотрим каждый из способов в отдельном параграфе.

3.1 Ввод данных с клавиатуры

Для организации такого ввода данных служит следующий участок программы:

For i:=1 to 3 do

      For j:=1 to 3 do

       begin

        Writeln('vvedite a [',i,';',j,']');

        readln (a[i,j]);

       end;

      For j:=1 to 3 do

       begin

        writeln('vvedite b [',j,']');

        readln (b[j]);

       end;

За счёт этого участка пользователь может сам заполнить два массива с клавиатуры, программа будет запрашивать 12 значений, организуется такое заполнение массивов с помощью оператора присвоения := и условного оператора Fortodo

3.2 Чтение данных из файла

За этот способ ввода данных отвечает следующий участок в программе:

assign(t, 'h:\Рыльков\2\Pascal\Данные.txt');

    reset(t);

    For i:=1 to 3 do

    For j:=1 to 3 do

      begin

       read (t, a[i,j]);

      end;

    readln (t);

    For j:=1 to 3 do

      begin

       read (t, b[j]);

      end;

    close(t);

Оператор assign присваивает переменной f путь к текстовому файлу, оператор reset открывает файл для чтения и устанавливает курсор в начало файла. Далее с помощью оператора Fortodo происходит чтение первой строки и заполнения массива данными из файла, затем оператор readln устанавливает курсор в начало второй строки и происходит чтение данных с второй строки. Оператор close закрывает файл.

4  РЕШЕНИЕ МАТРИЦЫ

Решение матрицы это основной и самый главный участок в программе, решение и нахождение неизвестных организовано по методу Крамера:

o:=a[1,1]*a[2,2]*a[3,3]-a[1,1]*a[2,3]*a[3,2]- a[1,2]*a[2,1]*a[3,3]+a[1,2]*a[2,3]*a[3,1]+a[1,3]*a[2,1]*a[3,2]-a[1,3]*a[2,2]*a[3,1];

    If o=0 then

     begin

      writeln('matrica ne imeet reshenii');

      readln

     end

Этот участок нужен для контроля наличия решения у исходной системы уравнений, если главный определитель окажется равным нулю, то программа выведет надпись на экран «matrica ne imeet reshenii» если он не раен нулю, то за счёт оператора IF … then … else решение матрицы продолжится:

    else

    BEGIN

    o1:=b[1]*a[2,2]*a[3,3]-b[1]*a[2,3]*a[3,2]- a[1,2]*b[2]*a[3,3]+a[1,2]*a[2,3]*b[3]+a[1,3]*b[2]*a[3,2]-a[1,3]*a[2,2]*b[3];

    o2:=a[1,1]*b[2]*a[3,3]-a[1,1]*a[2,3]*b[3]- b[1]*a[2,1]*a[3,3]+b[1]*a[2,3]*a[3,1]+a[1,3]*a[2,1]*b[3]-a[1,3]*b[2]*a[3,1];

    o3:=a[1,1]*a[2,2]*b[3]-a[1,1]*b[2]*a[3,2]- a[1,2]*a[2,1]*b[3]+a[1,2]*b[2]*a[3,1]+b[1]*a[2,1]*a[3,2]-b[1]*a[2,2]*a[3,1];

    x[1]:= o1/o;

    x[2]:= o2/o;

    x[3]:= o3/o;

После нахождения неизвестных их остаётся вывести на экран.

5  ВЫВОД ДАННЫХ

Как и ввод, вывод данных можно осуществить двумя способами:

1.  Вывести данные на экран

2.  Записать данные в файл

Организуется вывод данных практически также, как и ввод но операторы read и readln заменяются на операторы write и writeln. Участок программы отвечающий за вывод данных выглядит так:

Writeln('Запись в файл? (y/n)');

    readln(q);

    If q='n' then

            BEGIN

             for j:=1 to 3 do

                 begin

                  writeln ('x[',j,']=',x[j]:5:2);

                 end;

                 readln;

            END

    else

            BEGIN

            assign(f, 'h:\Рыльков\2\Pascal\ответ.txt');

            rewrite(f);

            for j:=1 to 3 do

             begin

              write (f, x[j]:5:2);

             end;

            close(f);

            writeln('готово');

            readln;

Как и при вводе данных, переменная q  и оператор If then else отвечает за способ вывода. При записи данных в файл мы используем ещё одну переменную f, а следовательно и ещё один файл. Оператор rewrite заменяет оператор reset, а в остальном коды участков аналогичны.

6  Зацикливание программы

Чтобы не запускать программу каждый раз для проведения нового расчета, можно организовать возможность повторения программы для других данных не перезапуская её, для этого достаточно её зациклить с помощью оператора While … do , за это отвечают два небольших участка в программе, один в самом начале:

w:='y';

  While w='y' do

Второй в самом конце:

writeln('Ещё разок?(y/n)');

readln(w);

То есть программа будет автоматически запускаться с самого начала до тех пор пока переменной w присвоен символ y , как только пользователь присвоит её любой другой символ программа завершится.

7  ВЫВОД

Язык программирования Pascalявляется достаточно простым языком для изучения и одновременно полноценным языком программирования для написания реальных программ.

          Бла бла бла….

8  ПРИЛОЖЕНИЕ

Весь текст программы выглядит вот так:

Program matrica;

var a:array[1..3,1..3] of integer;

    b:array[1..3] of integer;

    x:array[1..3] of real;

    i,j: integer;

    q,w:char;

    o, o1, o2, o3: real;

    f,t : text;

BEGIN

  w:='y';

  While w='y' do

BEGIN

    q:=' ';

    Writeln('Ввод данных из файла? (y/n)');

    Readln(q);

    If q='n' then

    BEGIN

      For i:=1 to 3 do

      For j:=1 to 3 do

       begin

        Writeln('vvedite a [',i,';',j,']');

        readln (a[i,j]);

       end;

      For j:=1 to 3 do

       begin

        writeln('vvedite b [',j,']');

        readln (b[j]);

       end;

    END

    else

    BEGIN

    assign(t, 'h:\Рыльков\2\Pascal\Данные.txt');

    reset(t);

    For i:=1 to 3 do

    For j:=1 to 3 do

      begin

       read (t, a[i,j]);

      end;

    readln (t);

    For j:=1 to 3 do

      begin

       read (t, b[j]);

      end;

    close(t);

    END;

    o:=a[1,1]*a[2,2]*a[3,3]-a[1,1]*a[2,3]*a[3,2]- a[1,2]*a[2,1]*a[3,3]+a[1,2]*a[2,3]*a[3,1]+a[1,3]*a[2,1]*a[3,2]-a[1,3]*a[2,2]*a[3,1];

    If o=0 then

     begin

      writeln('matrica ne imeet reshenii');

      readln

     end

    else

    BEGIN

    o1:=b[1]*a[2,2]*a[3,3]-b[1]*a[2,3]*a[3,2]- a[1,2]*b[2]*a[3,3]+a[1,2]*a[2,3]*b[3]+a[1,3]*b[2]*a[3,2]-a[1,3]*a[2,2]*b[3];

    o2:=a[1,1]*b[2]*a[3,3]-a[1,1]*a[2,3]*b[3]- b[1]*a[2,1]*a[3,3]+b[1]*a[2,3]*a[3,1]+a[1,3]*a[2,1]*b[3]-a[1,3]*b[2]*a[3,1];

    o3:=a[1,1]*a[2,2]*b[3]-a[1,1]*b[2]*a[3,2]- a[1,2]*a[2,1]*b[3]+a[1,2]*b[2]*a[3,1]+b[1]*a[2,1]*a[3,2]-b[1]*a[2,2]*a[3,1];

    x[1]:= o1/o;

    x[2]:= o2/o;

    x[3]:= o3/o;

    Writeln('Запись в файл? (y/n)');

    readln(q);

    If q='n' then

            BEGIN

             for j:=1 to 3 do

                 begin

                  writeln ('x[',j,']=',x[j]:5:2);

                 end;

                 readln;

            END

    else

            BEGIN

            assign(f, 'h:\Рыльков\2\Pascal\Ответ.txt');

            rewrite(f);

            for j:=1 to 3 do

             begin

              write (f, x[j]:5:2);

             end;

            close(f);

            writeln('Готово');

            readln;

            END;

    END;

readln;

writeln('Ещё разок?(y/n)');

readln(w);

END;

END.

Похожие материалы

Информация о работе

Предмет:
Информатика
Тип:
Отчеты по лабораторным работам
Размер файла:
33 Kb
Скачали:
0