ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
"САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ"
Инженерно-строительный факультет
Кафедра возобновляющихся источников энергии и гидроэнергетики
Отчёт по лабораторной работе № 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
Цель данной работы — освоить и изучить на базовом уровне один из языков программирования, а именно Pascal. Основной задачей является создание программы, реализующей алгоритм решения системы трех линейных уравнений. На этом примере мы изучим такие основы Turbo Pascal, как:
· Работа в программной среде Паскаль
· Некоторые стандартные операторы и циклы
· Работа с массивами
· Работа с текстовыми файлами
Всю нашу программа можно разбить на несколько элементарных задач:
1. Создание новой программы
2. Ввод данных и заполнение массивов
3. Решение матрицы
4. Вывод данных
5. Зацикливание программы
На этих пяти главах и построен весь отчёт.
Для создания программы нужен компилятор, в нашем случае это 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. символ «.» (точка) объявляет конец программы.
В нашей программе данные вводятся двумя различными способами:
1. Ввод с клавиатуры
2. Чтение данных из текстового файла
В программе предусмотрена возможность выбора любого из вышеперечисленных способов, она организуется так:
q:=' ';
Writeln('Ввод данных из файла? (y/n)');
Readln(q);
If q='n' then
BEGIN
q – переменная и в зависимости от её значения будет выбран способ ввода данных, то есть значение переменной q это символ n, то программа будет осуществлять ввод данных с клавиатуры, если значение q любой другой символ, то будет производиться чтение данных из файла, основной оператор этого участка If … then … else .
Рассмотрим каждый из способов в отдельном параграфе.
Для организации такого ввода данных служит следующий участок программы:
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 значений, организуется такое заполнение массивов с помощью оператора присвоения := и условного оператора For … to … do
За этот способ ввода данных отвечает следующий участок в программе:
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 открывает файл для чтения и устанавливает курсор в начало файла. Далее с помощью оператора For … to … do происходит чтение первой строки и заполнения массива данными из файла, затем оператор readln устанавливает курсор в начало второй строки и происходит чтение данных с второй строки. Оператор close закрывает файл.
Решение матрицы это основной и самый главный участок в программе, решение и нахождение неизвестных организовано по методу Крамера:
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;
После нахождения неизвестных их остаётся вывести на экран.
Как и ввод, вывод данных можно осуществить двумя способами:
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, а в остальном коды участков аналогичны.
Чтобы не запускать программу каждый раз для проведения нового расчета, можно организовать возможность повторения программы для других данных не перезапуская её, для этого достаточно её зациклить с помощью оператора While … do , за это отвечают два небольших участка в программе, один в самом начале:
w:='y';
While w='y' do
Второй в самом конце:
writeln('Ещё разок?(y/n)');
readln(w);
То есть программа будет автоматически запускаться с самого начала до тех пор пока переменной w присвоен символ y , как только пользователь присвоит её любой другой символ программа завершится.
Язык программирования 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;
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.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.