Решение задачи
Постановка задачи
Дан одномерный массив целых чисел произвольной длины. Заполните массив случайными числами до 100. Используя, оператор выбора, создайте меню, в котором при нажатии на клавишу производятся следующие действия:
1 - вычислить среднее геометрическое четных элементов массива;
2 - найти количество делителей максимального числа;
3 - вставить в массив два элемента с данными значениями: первый после минимального элемента, второй - перед минимальным элементом.
Таблица идентификаторов
№ | Переменные | Тип | Значение |
a | array | Заполнение одномерного массива | |
Max | integer | Максимальный элемент | |
Min | integer | Минимальный элемент | |
i | integer | Параметр цикла | |
N | integer | Размерность массива | |
k | integer | Количество делителей | |
m | integer | Выбор действия | |
s | Real | среднее геометрическое четных элементов массива | |
v, c | integer | два элемента вставляемые в массив | |
k1 | integer | Номер позиции перед (после) которой вставляем элемент | |
f | integer | Количество элементов, которые делятся на 2 без остатка | |
d | integer | Произведение всех элементов, которые делятся на 2 без остатка |
3.7.3 Блок-схема
3.7.4 Программа
uses crt;
Var a: array [1..100] of integer;
n, i,m,min,max,k,f,d,k1,c,v: integer;
S: real;
begin
clrscr;
randomize;
writeln ('введите разм. массива');
readln (n);
for i: =1 to n do
begin
a [i]: =random (101);
write (a [i]: 3);
end;
writeln;
writeln ('введите номер операции программы');
writeln ('1-вычислить среднее гео-ое четных эл. мас');
writeln ('2-найти ко-во делителей max числа');
writeln ('3-вставить в массив: 1-ый после min эл,2-ой перед min эл');
readln (m);
case m of
1: begin f: =0;
for i: =1 to n do
begin
if a [i] mod 2=0 then f: =f+1
end; writeln (f);
d: =1; s: =0;
for i: =1 to n do
begin
if a [i] mod 2=0 then d: =d*a [i];
end;
writeln (d);
if d=0 then s: =0 else s: =exp (1/f * ln (d));
writeln ('ср. геом=',S: 3: 3);
readln;
end;
2: begin
max: =a [1];
for i: =1 to n do
if a [i] >max then begin max: =a [i];
end;
for i: =1 to max do
if max mod i=0 then k: =k+1;
writeln ('ко-во делителей max числа',k);
readln;
end;
3: begin
writeln ('введите 2 числа');
readln (v,c);
min: =a [1];
k1: =1;
for i: =1 to n do
if a [i] <min then begin min: =a [i]; k1: =i; end;
writeln;
for i: =n downto k1 do
a [i+1]: =a [i];
a [k1]: =v;
for i: =n+1 downto k1+1 do
a [i+1]: =a [i];
a [k1+2]: =c;
for i: =1 to n+2 do
write (a [i]: 3);
readln;
end;
end;
end.
Результат работы программы
Решение задачи
Постановка задачи
Дан массив записей, содержащий сведения о расписании поездов: направление; фамилия, имя, отчество машиниста; время отправления поезда. Необходимо осуществить:
1. заполнение массива данными;
2. поиск поездов по фамилии, имени, отчеству машиниста;
3. редактирование времени отправления поезда;
4. удаление поездов по полю "Направление";
5. сортировку по полю "Направление".
Таблица идентификаторов
№ | Переменные | Тип | Значение |
A | array | Заполнение массива | |
N | integer | Количество поездов | |
Nap | string | Поле направления | |
fio | String | Поле фамилии имя отчества | |
vy | String | Поле время отправления | |
i, j | integer | Параметры цикла | |
q | integer | Выбор действия | |
s1 | string | Новое время | |
x | Rs | Дополнительная переменная для сортировки | |
s | String | Время | |
w | String | Фамилия, Имя, Отчество машиниста | |
r | String | Направление поезда, которое удаляем | |
k | Integer | Номер удаляемой записи | |
f | integer | флажок |
Блок-схема
Программа
type RS=Record
Nap: string [40];
fio: string [40];
vy: string [10];
end;
var a: array [1..50] of RS;
n, i,j,q,k,f: integer; s,s1,w,r: string; x: RS;
begin
Writeln ('введите kol poezdov');
readln (n);
for i: =1 to n do
begin
writeln ('введите Направление',' ', i,' ','поезда');
readln (a [i]. Nap);
writeln ('введите Ф. И.О. ',' ', i,' ','машиниста');
readln (a [i]. fio);
writeln ('введите время',' ', i,' ','отправления');
readln (a [i]. vy);
end;
writeln ('введите номер операции программы');
writeln ('1-поиск поездов по фамилии, имени, отчеству машиниста');
writeln ('2-редактирование времени отправления поезда');
writeln ('3-удаление поездов по полю <Направление>');
writeln ('4-сортировку по полю <Направление>');
readln (q);
case q of
1: begin
writeln ('ведите Ф. И.О. машиниста ');
readln (w);
f: =0;
for i: =1 to n do
begin
if a [i]. fio=w then begin
writeln ('Направление ',a [i]. Nap,' ','время ',a [i]. vy);
f: =1; end;
if f=0 then writeln ('таких нет');
end; end;
2: begin
writeln ('введите время которое вы хотите поменять');
readln (s);
writeln ('введите время на которое вы хотите поменять');
readln (s1);
for i: =1 to n do begin
if a [i]. vy=s then a [i]. vy: =s1;
end;
for i: =1 to n do
begin
writeln (i,’ ’,'машинист ',a [i]. fio,' ','Направление ',a [i]. Nap);
writeln ('время ',a [i]. vy);
writeln;
end; end;
3: begin
writeln ('введите Направление поезда, которое вы хотите удалить');
readln (r);
for i: =1 to n do begin
if a [i]. Nap=r then
k: =i;
for i: =1 to n do
if i<>k then
writeln (i,’ ’,'машинист ',a [i]. fio,' ','Направление ',a [i]. Nap);
writeln ('время ',a [i]. vy);
end;
end;
4: begin
for i: =1 to n-1 do
for j: =1 to n do
if a [i]. Nap>a [j]. Nap then
begin
x: =a [i];
a [i]: =a [j];
a [j]: =x;
end;
for i: =1 to n do
begin
writeln (i,’ ’,'машинист ',a [i]. fio,' ','Направление ',a [i]. Nap);
writeln ('время ',a [i]. vy);
end;
end;
end;
readln;
end.