Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

АиП-1семестр

.docx
Скачиваний:
7
Добавлен:
28.02.2021
Размер:
791.32 Кб
Скачать

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ

РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ

УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«СЕВАСТОПОЛЬСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»

Институт информационных технологий и управления в технических системах

(полное название института)

кафедра «Информационные системы»

(полное название кафедры)

Контрольная работа №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 Близнецы Кривенко Тамара Петровна Вывод:

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

Соседние файлы в предмете Алгоритмизация и программирование