
АиП-1семестр
.docx-
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ
РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ
УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«СЕВАСТОПОЛЬСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»
Институт информационных технологий и управления в технических системах
(полное название института)
кафедра «Информационные системы»
(полное название кафедры)
Контрольная работа №1
по дисциплине «Алгоритмизация и программирование»
выполнил студент группы ИС/б-19-1-з
проверил
_________________________________
-
20
20
г.
ЛАБОРАТОРНАЯ РАБОТА №2 «ПРОГРАММИРОВАНИЕ ЛИНЕЙНЫХ И РАЗВЕТВЛЯЮЩИХСЯ АЛГОРИТМОВ»
Цель работы: Изучение основных типов данных, исследование математических функций языка Паскаль и простейших процедур ввода-вывода. Приобретение навыков разработки и отладки программ линейной и разветвляющейся структуры.
Задача: Составить структурную схему алгоритма и написать на языке Паскаль программу вычисления функции z = f(x). Значения параметров a, b и аргумента x вводятся с клавиатуры. Результаты вычислений выводятся на дисплей в форме с плавающей точкой.
Структурная схема алгоритма:
Код программы:
var z,a,b,x:real;
begin
write('x=');readln(x);
write('a=');readln(a);
write('b=');readln(b);
if x<=a then z:=ln(x)+abs(x)
else if (x>a)and(x<b) then z:=x*x*x+cos(x)
else if (x>=b) then z:=exp(4*LN(x));
writeln('z=',z);
end.
Описание тестов и результатов тестирования программы:
Пример 1
Вводные
данные: 5 2 5
Условие x>=b, программа выполняется правильно:
z:=exp(4*LN(x))=>5^4=625
Пример 2
Вводные данные: 3 2 4
Условие (x>a) and (x<b), программа выполняется правильно:
z:=x*x*x+cos(x) => 3^3+cos(3) = 27+(−0,9899924966) = 26,0100075033996
Вывод: Изучены основные типы данных, исследованы математические функции языка Паскаль и простейшие процедуры ввода-вывода. Приобретены навыки разработки и отладки программ линейной и разветвляющейся структуры.
ЛАБОРАТОРНАЯ РАБОТА №3 «ПРОГРАММИРОВАНИЕ АЛГОРИТМОВ ЦИКЛИЧЕСКОЙ СТРУКТУРЫ»
Цель работы: Получить навыки программирования итерационных циклических алгоритмов, исследовать зависимость объёма вычислений от точности.
Задача:
Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда, на интервале от ХНАЧ до ХКОН с шагом dХ и точностью E. Таблицу снабдить заголовком и шапкой. Строка таблицы должна содержать значение аргумента, значение функции и количество просуммированных членов ряда.
Структурная схема алгоритма:
Код программы:
//функция вычисления ряда
function f(x,eps:real;var n:integer):real;
var t,s:real;
begin
n:=0;
t:=1;
s:=t;
while abs(t)>eps do
begin
n:=n+1;
t:=-t*x*x/(2*n)/(2*n+1);
s:=s+t;
end;
f:=s;
end;
var xn,xk,dx,eps,x,y,s:real;
n:integer;
begin
write('Введите начало диапазона xn=');
readln(xn);
repeat
write('Введите конец интервала xk>',xn:0:2,' xk=');
readln(xk);
until xk>xn;
repeat
write('Ввдите шаг табуляции dx<',xk-xn:0:2,' dx=');
readln(dx);
until dx<xk-xn ;
repeat
write('Введите точность 0<eps<1 eps=');
readln(eps);
until(eps>0)and(eps<1);
writeln('Таблица значений аргумента и функции sinx/x, представленной разложением в ряд Тейлора');
writeln('на интервале [',xn:0:2,',',xk:0:2,'] с точностью ',eps:0:6);
writeln('----------------------------------');
writeln('| x | S | y | n |');
writeln('----------------------------------');
x:=xn;
while x<xk+dx/2 do
begin
if x=0 then y:=1 else y:=sin(x)/x;
s:=f(x,eps,n);
writeln('|',x:5:2,'|',s:9:4,' |',y:8:4,' |',n:4,' |');
x:=x+dx;
end;
writeln('-----------------------------------');
end.
Описание тестов и результатов тестирования программы:
Пример 1
Вводные данные: 2 10 2 0.01
Пример 2 Вводные данные: 1 5 1 0.9
Вывод: Получены навыки программирования итерационных циклических алгоритмов, исследованы зависимость объёма вычислений от точности.
ЛАБОРАТОРНАЯ РАБОТА №4 «ПРОГРАММИРОВАНИЕ АЛГОРИТМОВ ОБРАБОТКИ ОДНОМЕРНЫХ МАССИВОВ»
Цель работы:
Изучить способы представления массивов в памяти ЭВМ, получить практические навыки реализации алгоритмов обработки одномерных массивов, исследовать свойства алгоритма сортировки.
Задача:
В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) количество элементов массива, больших С; 2) произведение элементов массива, расположенных после максимального по модулю элемента. Преобразовать массив таким образом, чтобы сначала располагались все неотрицательные элементы, а потом – все отрицательные. Упорядочить каждую часть массива по возрастанию, используя алгоритм сортировки методом вставки.
Структурная схема алгоритма:
Код программы:
uses crt;
const Sz=100;
var x:array [1..Sz] of real;
buf,c, proiz:real;
i,n,k,j,n_max:integer;
begin
k:=0; {число элементов больших C}
n_max:=1; {Номер максимального по модулю элемента}
clrscr;
write('Введите C=');
readln(c);
writeln ('Количество элементов массива');
readln(N);
writeln('Введите элементы массива');
for i:=1 to n do
begin
write('x[',i,']=');
readln(x[i]);
if x[i]>c then
k:=k+1; {счетчик кол-ва элементов массива, больших С};
if abs(x[n_max])<abs(x[i]) then
n_max:=i;
end;
proiz:=1; {Произведение элементов}
clrscr;
writeln('Исходный массив');
for i:=1 to n do
write(x[i],' ');
writeln;
for i:=2 to n do
begin
buf:=x[i];
j:=i-1;
while (j>=1) and (x[j]<buf) do
begin
x[j+1]:=x[j];
j:=j-1;
end;
x[j+1]:=buf;
end;
for i:=1 to N do
begin
if i>n_max then
proiz:=proiz*x[i];
end;
writeln('Количество элементов массива, больших С=', k);
writeln('Произведение элементов: ',proiz);
writeln('Результат:');
for i:=1 to n do
write(x[i],' ');
readln
end.
Пример 1
Введенные
данные: 2 -8 6 3 -1 5
Пример 2
Вводные данные: 1 2 3 -4 5
Вывод: Изучены способы представления массивов в памяти ЭВМ, получены практические навыки реализации алгоритмов обработки одномерных массивов, исследованы свойства алгоритма сортировки.
ЛАБОРАТОРНАЯ РАБОТА №5 «ОБРАБОТКА ДВУМЕРНЫХ МАССИВОВ С ПОМОЩЬЮ ПРОЦЕДУР И ФУНКЦИЙ»
Цель работы
Изучить основные принципы обработки двумерных массивов, получить навыки разработки программ блочной структуры, исследовать способы передачи параметров в процедуры и функции.
Задача
Дана целочисленная прямоугольная матрица. Определить номер первого из столбцов, содержащих хотя бы один нулевой элемент. Характеристикой строки целочисленной матрицы назовем сумму ее отрицательных четных элементов. Переставляя строки заданной матрицы, расположить их в соответствии с убыванием характеристик.
Код программы
uses crt; const nrow = 5; ncol = 3; type matrix = array[1..nrow, 1..ncol] of Integer; list_har_ka = array[1..nrow] of integer; var a: matrix; s_m: list_har_ka; //list_har_ka: array[1..nrow] of integer; procedure Vvod(var a: matrix); var i, j: Integer; begin Writeln('Введите элементы массива:'); for i := 1 to nrow do begin for j := 1 to ncol do begin Read(a[i, j]); end; //writeln; end; writeln('___________________'); end; procedure Harakterystika(const a: matrix; var s_m: list_har_ka);//; Var v:vector); var i, j, k: Integer; begin for i := 1 to nrow do begin k := 0; for j := 1 to ncol do begin if (a[i, j] < 0) and (a[i, j] mod 2 = 0) then k := k + a[i, j]; end; writeln('Характеристика ', i, ' строки: ', k); s_m[i]:= k; end; writeln('________________'); end; procedure Poisk(const a: matrix); var i, j, b: integer; begin b:=-1; for j := 1 to nrow do begin for i := 1 to ncol do begin if a[i, j] = 0 then begin //writeln('В толбце ',j, ' содержиться первый нулевой элемент'); b := j; break; end; end; if b <> -1 then break; end; if b <> -1 then writeln('В cтолбце ',b, ' содержиться первый нулевой элемент') else writeln('Не найдено нулевыйх элементов'); writeln('____________________'); end; procedure sort_har_ka(const a: matrix; var s_m: list_har_ka); Var buf_sum: LongInt; min, buf_a: Integer; i, j: Integer; Begin For i:=1 to nrow-1 do Begin min:=i; for j:=i+1 to nrow do if s_m[j]<s_m[min] then min:=j; buf_sum:=s_m[i]; s_m[i]:=s_m[min]; s_m[min]:=buf_sum; for j:=1 to ncol do begin buf_a:=a[i,j]; a[i,j]:=a[min,j]; a[min,j]:=buf_a; end; End; writeln('Отсортированный по хар-ка массив: '); for i:=nrow downto 1 do writeln(a[i]); End; begin Vvod(a); Harakterystika(a, s_m); Poisk(a); sort_har_ka(a, s_m); readkey; end.
Структурная схема программы:
Пример
Вводные данные: 5 8 6 -3 12 -6 1 2 6 7 4 3 10 11 15
Вывод:
Изучены основные принципы обработки двумерных массивов, получены навыки разработки программ блочной структуры, исследованы способы передачи параметров в процедуры и функции.
ЛАБОРАТОРНАЯ РАБОТА №6 “ПРОГРАММИРОВАНИЕ ОПЕРАЦИЙ НАД СТРОКАМИ И ТЕКСТОВЫМИ ФАЙЛАМИ”
Цель работы
Изучение основных операций над строками и файлами, программирование операций обработки строк текстовых файлов, исследование свойств файловых переменных.
Задача
Написать программу, которая считывает текст из файла, находит самое длинное слово и определяет, сколько раз оно встретилось в тексте.
Структурная схема программы:
Текст кода:
Var f:text;
s,max:string;
sum:integer;
Begin
sum:=0;
Assign(f,'file.txt');
Reset(f);
max:='';
While not Eof(f) do
Begin
readln(f,s);
s:=s+' ';
While Pos(' ',s)>0 do
Begin
if Length(Copy(s,1,Pos(' ',s)-1))>=Length(max) then begin sum:=sum+1; max:=Copy(s,1,Pos(' ',s)-1); end;
Delete(s,1,Pos(' ',s));
End;
End;
writeln('Самое длинное слово в файле: ',max);
writeln(sum);
Close(f);
End.
Пример 1 Текст из файла file.txt:
Yesterday I visited my Granny in the countryside. We go there every weekend and I enjoy these trips. But not this time. It was raining cats and dogs, our car broke several times and we all were very tired. But when we saw the Granny, I forgot about the difficulties.
Вводные
данные: file.txt
Пример 2 Текст: One little, two little, three little Indians Four little, five little, six little Indians Seven little, eight little, nine little Indians Ten little Indian boys. Ten little, nine little, eight little Indians Seven little, six little, five little Indians Four little, three little, two little Indians One little Indian boy.
Результат:
Вывод Изучены основные операции над строками и файлами, программирование операций обработки строк текстовых файлов, исследованы свойства файловых переменных.
ЛАБОРАТОРНАЯ РАБОТА №7
“ПРОГРАММИРОВАНИЕ ОПЕРАЦИЙ НАД ЗАПИСЯМИ И ТИПИЗИРОВАННЫМИ ФАЙЛАМИ”
Цель работы
Исследование способов обработки логически связанных данных различных типов. Создание программ, использующих записи и типизированные файлы.
Задача
Описать структуру с именем ZNAK, содержащую следующие поля: - фамилия, имя; - знак Зодиака; - дата рождения (массив из трех чисел). Написать программу, выполняющую следующие действия с помощью процедур или функций: - ввод с клавиатуры данных в файл, состоящий из элементов типа ZNAK; записи должны быть упорядочены по датам рождения; - чтение данных из этого файла; - вывод на экран информации о человеке, чья фамилия введена с клавиатуры; если такого нет, выдать на дисплей соответствующее сообщение.
Структурная
схема программы:
Код программы: program Project1;
const zodiak:array[0..11] of string = ('Vodoley (21.01-19.02)','Ribi (20.02-20.03)','Oven (21.03-20.04)','Telec (21.04-21.05)',
'Blizneci (22.05-21.06)','Rak (22.06-22.07)','Lev (23.07-23.08)','Deva (24.08-23.09)',
'Vesi (24.09-23.10)','Skorpion (24.10-22.11)','Strelec (23.11-21.12)','Kozerog (22.12-20.01)');
n=2;
type znak=record
zodiak:string[30];{data:array[1..3] of integer;}
FIO:string[45];
birthday: record
day:1..31;
month:1..12;
year:integer;
end;
end;
var
F:file of znak; {File dlia xraneniia bazi Znak}
a:array[1..n]of znak;
elem1,elem2:znak;
Procedure create_file;
begin
assign(f,'f'); rewrite(f);
writeln('введите сведения о человеке');
while true do begin
If Elem1.FIO='*' Then Break;
writeln ('введите фамилию и имя');
readln(elem1.FIO);
writeln('введите дату рождения');
readln(elem1.birthday.day);
readln(elem1.birthday.month);
readln(elem1.birthday.year);
writeln('введите знак');
readln(elem1.zodiak);
write(f,elem1);
end;
close(f);
end;
Procedure read_file; {чтение данных из этого файла}
begin
assign(f,'f'); reset(f);
while not eof(f) do begin
read(f,elem1);
with elem1 do
writeln (FIO,birthday.day:10,'.',birthday.month,'.',birthday.year,zodiak:20);
end;
close(f);
end;
Procedure read_man; {вывод на экран информации о человеке, чья фамилия введена с клавиа-
туры}
var s:string; b:boolean;
begin
assign(f,'f'); reset(f);
write('фио: ');readln(s); b:=false;
while not eof(f) do begin
read(f,elem1);
with elem1 do
if FIO=s then begin
writeln (FIO,birthday.day:10,'.',birthday.month,'.',birthday.year,zodiak:20);
b:=true;
end;
end;
close(f);
if not b then writeln('Такого нет');
end;
begin
create_file; read_file; read_man; readln;
end.
Пример
Вводные данные: Кривенко Олег Петрович 30 04 2002 Телец Кривенко Тамара Петровна 12 06 1995 Близнецы Кривенко Тамара Петровна Вывод:
Исследованы способы обработки логически связанных данных различных типов. Создана программа, использующая записи и типизированные файлы.