После формулировки задачи следует текст ... информация, выводимая программой на экран. ... ПРИМЕРЫ PASCAL - ПРОГРАММ

advertisement
ПРИМЕРЫ PASCAL - ПРОГРАММ
После формулировки задачи следует текст программы, а затем информация, выводимая программой на экран. Подчеркнутые символы
введены с клавиатуры.
Пример для задания № 1. При заданных значениях аргументов
вычислить значения функции:
x
e
y
2
1,67 x
  3 x  sin 2 72
3
x  log 4 x
.
program EXAMPLE_1;
uses crt;
var x,y:real;
begin
clrscr;
writeln(’Задание 1. Вариант № 1’);
writeln(’Введите значение х:’);
write(’x=’);
readln(x);
y:=(exp(xx+1.67x)+exp(1/3ln(abs(x)/3
+sqr(sin(72pi/180)))))/
(sqrt(abs(x))ln(abs(x))/ln(4));
writeln(’При x=’,x:6:3,’, y=’,y:6:3);
writeln(’Конец программы. Нажмите Enter’);
readln
end.
Задание 1. Вариант № 1.
Введите значение х:
x=-0.87
При х = -0.870, y = -16.645
Конец программы. Нажмите Enter
Блок схема для задания № 1:
Example_1
Ввод Х
e
y
x
2
1,67 x
  3 x  sin 2 72
3
x  log 4 x
Вывод Y
Example_1
Пример для задания № 2. Вычислить значения функций z в зависимости
от заданных условий:
lg x  y,
при x  y,

y
 
z  sin  x  ln  , при x  y,
2
 
x  ey ,
при x  y.

program EXAMPLE_2;
uses crt;
var x,y,z:real;
begin
clrscr;
writeln(’Задание 2. Вариант № 1’);
write(’Введите х=’);
readln(x);
write(’Введите y=’);
readln(y);
if x>y then
begin
writeln(’Расчет по формуле 1’);
z:=ln(x)/ln(10)+y;
end
else if x=y then
begin
writeln(’Расчет по формуле 2’);
z:=sin(x+ln(abs(y/2)))
end
else
begin
writeln(’Расчет по формуле 3’);
z:=x+exp(y);
end;
writeln(’При х=’,x:5:2,’ и y=’,y:5:2,’ z=’,z:5:2);
writeln(’Конец программы. Нажмите Enter’);
readln
end.
Задание 2. Вариант № 1
Введите х=2.5
Введите y=-2.5
При х=2.50 и y=-2.50 z=-2.10
Введите х = 0
Конец программы. Нажмите Enter
Блок схема для задания № 2:
Example_2
Ввод Х и Y
X>Y
нет
да
z  lg x  y
X=Y
нет
да

y
z  sin  x  ln 
2

Вывод Z
Example_2
z  x  ey
Пример для задания № 3: Вычислить
значений функции y 

3
xi  0,5

2
и
распечатать
таблицу
на интервале значений x  1,3
с шагом h=0,1.
program EXAMPLE_3;
uses crt;
var x,h:real;
i:integer;
c:char;
Function F(x:real):real;
begin
F:=sqr(exp(1/3*ln(abs(x)))-0.5);
end;
begin
repeat
clrscr;
writeln('Задание 3. Вариант № 1');
write('Введите начальное значение х=');
readln(x);
write('Введите шаг h=');
readln(h);
writeln('Выберите вид цикла. Нажмите:');
writeln('1 - для цикла FOR');
writeln('2 - для цикла WHILE');
writeln('3 - для цикла REPEAT');
writeln('0 - выход из программы');
readln(c);
case c of
'1':for i:=1 to 21 do
begin
writeln('При х=',x:5:2,' y=',F(x):5:2);
x:=x+h;
end;
'2':While x<=3 do
begin
writeln('При х=',x:5:2,' y=',F(x):5:2);
x:=x+h;
end;
'3':Repeat
writeln('При х=',x:5:2,' y=',F(x):5:2);
x:=x+h;
until x>3;
end;
readln;
until c='0';
end.
Задание 3. Вариант № 1
Введите начальное значение х=1
Введите шаг h=0.1
Выберите вид цикла. Нажмите:
1 - для цикла FOR
2 - для цикла WHILE
3 - для цикла REPEAT
0 - выход из программы
1
При х= 1.00 y= 0.25
При х= 1.10 y= 0.28
При х= 1.20 y= 0.32
При х= 1.30 y= 0.35
При х= 1.40 y= 0.38
При х= 1.50 y= 0.42
При х= 1.60 y= 0.45
При х= 1.70 y= 0.48
При х= 1.80 y= 0.51
При х= 1.90 y= 0.55
При х= 2.00 y= 0.58
При х= 2.10 y= 0.61
При х= 2.20 y= 0.64
При х= 2.30 y= 0.67
При х= 2.40 y= 0.70
При х= 2.50 y= 0.73
При х= 2.60 y= 0.77
При х= 2.70 y= 0.80
При х= 2.80 y= 0.83
При х= 2.90 y= 0.86
При х= 3.00 y= 0.89
Блок схема для задания № 3:
Function F(x)
F

3
xi  0,5
Example_3

2
Ввод x, h, c
Function F(x)
C=
С=1
С=3
С=2
I = 1 to 21
нет
X<=3
да
Вывод X, F(x)
Вывод X, F(x)
Вывод X, F(x)
нет
X = X+h
X = X+h
нет
I=I+1
X = X+h
X>3
да
C=’0'
да
Example_3
Пример для задания № 4. Из массива удалить элемент, стоящий перед
первым нулевым элементом, а затем вставить заданное число перед каждым
положительным элементом массива.
Program Example_4;
Uses crt;
const N=40;
var massiv:array [1..N] of integer;
count:integer;
c:char;
{Процедура заполнение массива случайными числами}
Procedure Random_Input(Var m:array of integer;k:integer);
Var i:integer;
begin
Randomize;
For i:=1 to k do m[i]:=random(19)-9;
end;
{Процедура заполнение массива с клавиатуры}
Procedure Manual_Input(Var m:array of integer;k:integer);
Var i:integer;
begin
For i:=1 to k do
begin
write('m[',i,']=');
readln(m[i]);
end;
end;
{Процедура выбора способа заполнения элементов массива}
Procedure Input(Var m:array of integer;Var k:integer);
Var c:char;
begin
repeat
repeat
write('Введите количество элементов массива: ');
readln(k);
until (k>0) and (k<20);
writeln('Выберите способ заполнения массива.
Нажмите:');
writeln('1 - для заполнения случайными числами');
writeln('2 - для заполнения с клавиатуры');
readln(c);
case c of
'1':Random_Input(m,k);
'2':Manual_Input(m,k);
end;
until (c='1') or (c='2');
end;
{Процедура вывода элементов массива на экран}
Procedure Output(m:array of integer;k:integer;s:string);
Var i:integer;
begin
Writeln(s);
For i:=1 to k do write(m[i]:3);
Writeln;
end;
{Процедура удаления элемента перед 1-ым нулем}
Procedure Del(Var m:array of integer;Var k:integer);
Var i,j:integer;
begin
i:=1;
While (m[i]<>0) and (i<=k) do inc(i);
if i>k then writeln('Нулевых элементов нет')
else
if i=1 then writeln('Первый нулевой элемент
стоит на первой позиции')
else
begin
for j:=i-1 to k-1 do m[j]:=m[j+1];
dec(k);
end;
end;
{Процедура вставки заданного числа перед положительными
элементами массива}
Procedure Ins(Var m:array of integer;Var k:integer);
Var i,j,z:integer;
begin
Write('Введите заданное число: ');
Readln(z);
For i:=k downto 1 do
If m[i]>0 then
begin
inc(k);
for j:=k downto i+1 do m[j]:=m[j-1];
m[i]:=z;
end;
end;
{Основная программа}
begin
repeat
Clrscr;
Writeln('Задание 4. Вариант № 1');
Input(massiv,count);
Output(massiv,count,'Исходный массив');
Del(massiv,count);
Output(massiv,count,'Массив после удаления');
Ins(massiv,count);
Output(massiv,count,'Массив после вставки');
write('Для повтора нажмите 1, любая другая клавиша
- выход');
readln(c);
until (c<>'1');
end.
Задание 4. Вариант № 1
Введите количество элементов массива: 10
Выберите способ заполнения массива. Нажмите:
1 - для заполнения случайными числами
2 - для заполнения с клавиатуры
1
Исходный массив
9 –3 6 –2 9 –5 0 –2 0 9
Массив после удаления
9 –3 6 –2 9 0 –2 0 9
Введите заданное число: 11
Массив после вставки
11 9 –3 11 6 –2 11 9 0 –2 0 11 9
Для повтора нажмите 1, любая другая клавиша – выход
Блок схема для задания № 4:
Procedure Random_Input
(Var m:array of integer;k:integer)
Randomize
Procedure Manual_Input
(Var m:array of integer;k:integer)
Procedure Output
(m:array of integer;k:integer)
I = 1 to k
I = 1 to k
Ввод m[i]
Вывод m[i]
I=I+1
I=I+1
Procedure Manual_Input
Procedure Output
I = 1 to k
M[i]=random(19)-9
I=I+1
Procedure Random_Input
Procedure Input
(Var m:array of integer;Var
k:integer)
нет
Ввод k
(k>0) or (k<20)
да
нет
С
С=
C=2
С=1
Random_Input
(massiv,count)
(c='1') or (c='2')
да
Procedure Input
Manual_Input
(massiv,count)
Procedure Ins
(Var m:array of integer; Var
k:integer)
Procedure Del
(Var m:array of integer;k:integer)
i=1
Ввод Z
(m[i]<>0) or (i<=k)
I = k downto 1
да
нет
Inc(i)
M[i]>0
нет
да
да
i>k
Inc(k)
нет
i=1
да
нет
j = i-1 to k-1
Нулевых
элементов нет
j = k downto i+1
m[j]=m[j-1]
Первый нулевой
элемент стоит
на первом месте
j=j-1
m[j]=m[j+1]
M[i]=Z
j=j+1
Dec(k)
I=I-1
Procedure Ins
Procedure Del
Example_4
Input
(massiv,count)
Output
(massiv,count)
Del
(massiv,count)
Output
(massiv,count)
Ins
(massiv,count)
Output
(massiv,count)
Ввод C
С=1
да
Example_4
Пример для задания № 5. Расположить в порядке убывания положительные
элементы строк с четным количеством положительных элементов
Program Example_5;
Uses wincrt;
Type matrix=array [1..10,1..10] of integer;
Var mas2:matrix;
row,col:integer;
c:char;
{Процедура заполнение матрицы случайными числами}
Procedure Input_Matrix(Var m:matrix;Var r,c:integer);
Var i,j:integer;
begin
Write('Введите количество строк-');
Readln(r);
Write('Введите количество столбцов-');
Readln(c);
Randomize;
For i:=1 to r do
For j:=1 to c do
m[i,j]:=random(19)-9;
end;
{Процедура вывода элементов матрицы на экран}
Procedure Output_Matrix(m:matrix;r,c:integer;s:string);
Var i,j:integer;
begin
Writeln(s);
For i:=1 to r do
begin
For j:=1 to c do Write(m[i,j]:3);
Writeln;
end;
end;
{Процедура сортировки элементов матрицы }
Procedure Sort_Matrix(Var m:matrix;r,c:integer);
Var i,j,j1,count,temp:integer;
begin
For i:=1 to row do
begin
count:=0; {счетчик положительных элементов}
For j:=1 to col do
If m[i,j]>0 then inc(count);
writeln(i,'-ая строка-',count);
If not(odd(count)) then {проверка на четность}
For j:=1 to col-1 do
If m[i,j]>0 then
For j1:=j+1 to col do
If (m[i,j1]>0) and (m[i,j]<m[i,j1]) then
begin
temp:=m[i,j];
m[i,j]:=m[i,j1];
m[i,j1]:=temp;
end;
end;
end;
{Основная программа}
begin
repeat
Clrscr;
Writeln('Задание 5. Вариант № 1.');
Input_Matrix(mas2,row,col);
Output_Matrix(mas2,row,col,'Исходная матрица');
Sort_Matrix(mas2,row,col);
Output_Matrix(mas2,row,col,'Конечная матрица');
write('Для повтора нажмите 1, любая другая клавиша
- выход');
readln(c);
until (c<>'1');
end.
Задание 5. Вариант № 1.
Введите количество строк-5
Введите количество столбцов-10
Исходная матрица
-9 3 -5 -3 7 9 1 2 3 -7
-4 -1 7 -3 -1 8 1 5 -3 4
-6 1 5 -7 2 0 2 -9 -3 -3
7 -1 6 3 9 5 -4 7 0 3
5 -6 0 1 -9 1 -2 -4 6 9
1-ая строка-6
2-ая строка-5
3-ая строка-4
4-ая строка-7
5-ая строка-5
Конечная матрица
-9 9 -5 -3 7 3 3 2 1 -7
-4 -1 7 -3 -1 8 1 5 -3 4
-6 5 2 -7 2 0 1 -9 -3 -3
7 -1 6 3 9 5 -4 7 0 3
5 -6 0 1 -9 1 -2 -4 6 9
Для повтора нажмите 1, любая другая клавиша - выход
Блок схема для задания № 5:
Example_5
Procedure Input_Matrix
(Var m:matrix;Var row,col:integer)
Input_Matrix
(mas2,row,col)
Ввод row,col
Output_Matrix
(mas2,row,col)
Randomize
Procedure Output_Matrix
(m:matrix; row,col:integer)
I = 1 to row
j = 1 to col
Sort_Matrix
(mas2,row,col)
I = 1 to row
Ввод row,col
Output_Matrix
(mas2,row,col)
j = 1 to col
j=j+1
Ввод C
M[I,j]=random(19)-9
I=I+1
j=j+1
С=1
Procedure Output_Matrix
да
I=I+1
Example_5
Procedure Input_Matrix
Procedure Sort_Matrix
(Var m:matrix; row,col:integer)
1
I = 1 to row
temp:=m[i,j];
m[i,j]:=m[i,j1];
m[i,j1]:=temp;
Count=0
j1 = j1 + 1
j = 1 to col
j=j+1
M[I,j]>0
да
Inc(count)
I=I+1
нет
j=j+1
Procedure Sort_Matrix
Not(odd(count))
да
j = 1 to col-1
нет
M[I,j]>0
да
нет
j1 = j+1 to col
(M[I,j1]>0) and
(M[I,j]<M[I,j1])
нет
да
1
2
3
4
2
3
4
Пример для задания № 6. Считать текст (не более 255 символов) из исходного
файла, найти слово с наибольшим количеством слогов и записать в конечный
файл предложение с данным словом.
Program Example_6;
Uses wincrt;
Var stroka,result:string;
c:char;
{Процедура чтения текста из файла}
Procedure Read_From_File(Var s:string);
var text_file:text;
file_name:string;
begin
Write('Введите имя файла для чтения текста: ');
Readln(file_name);
Assign(text_file,file_name);
{$I-}
Reset(text_file);
{$I+}
If IOResult<>0 then {Проверка ошибки открытия}
begin
Writeln('Файл ',file_name,' не существует.');
Writeln('Программа завершена. Нажмите Enter');
Readln;
Halt;
end
else
begin
Readln(text_file,s);
Close(text_file);
Writeln('Прочитанный текст:');
Writeln(s);
end;
end;
{Процедура записи текста в файл}
Procedure Save_To_File(s:string);
Var text_file:text;
file_name:string;
begin
Write('Введите имя файла для записи предложения: ');
Readln(file_name);
Assign(text_file,file_name);
Rewrite(text_file);
Writeln(text_file,s);
Close(text_file);
Writeln('Результат записан в файл ',file_name);
end;
{Процедура обработки текста}
Procedure Process(s:string;Var rez:string);
Var i,nach_predl,kon_predl,nach_slov,kon_slov:integer;
nach_max_slov,kon_max_slov,count,max_count:integer;
glasn,bukv,znak:set of char;
temp_stroka:string;
begin
bukv:=['А'..'Я','а'..'я','Ё','ё']; {множество букв}
glasn:=['А','а','Е','е','И','и','О','о','У','у',
'Ы','ы','Э','э','Ю','ю','Я','я','Ё','ё']; {множество
гласных букв}
znak:=['.','!','?']; {множество знаков конца
предложения}
i:=1;
count:=0; {количество слогов}
max_count:=0; {максимальное количество слогов}
While i<=length(s) do
begin
if (s[i] in bukv) and (i=1) or (s[i] in bukv) and
not(s[i-1] in bukv) then {поиск начала слова}
begin
nach_slov:=i;
count:=0;
end;
if s[i] in glasn then inc(count);
if (s[i] in bukv) and (i=length(s)) or (s[i]
in bukv) and not(s[i+1] in bukv) then
{поиск конца слова}
begin
kon_slov:=i;
if count>max_count then
{поиск слова с максимальным количеством слогов}
begin
max_count:=count;
nach_max_slov:=nach_slov;
kon_max_slov:=kon_slov;
end;
end;
inc(i);
end;
count:=kon_max_slov-nach_max_slov+1;
Writeln;
Writeln('Слово с наибольшим количеством слогов:');
Writeln(copy(s,nach_max_slov,count),'-',max_count,'
слогов');
{Поиск начала предложения}
i:=nach_max_slov;
while not(s[i-1] in znak) and (i>1) do dec(i);
nach_predl:=i;
{Поиск конца предложения}
i:=kon_max_slov+1;
while not(s[i] in znak) and (i<length(s)) do inc(i);
kon_predl:=i;
{Копирование предложения}
count:=kon_predl-nach_predl+1;
rez:=copy(s,nach_predl,count);
Writeln;
Writeln('Предложение для записи в файл:');
Writeln(rez);
end;
{Основная программа}
begin
repeat
Writeln('Задание 6. Вариант № 1.');
Read_From_File(stroka);
Process(stroka,result);
Save_To_File(result);
write('Для повтора нажмите 1, любая другая клавиша выход');
readln(c);
until (c<>'1');
end.
Задание 6. Вариант № 1.
Введите имя файла для чтения текста: data.txt
Прочитанный текст:
Процедурный механизм сочетает в себе простоту реализации
и гибкие средства параметризации. Синтаксис языка
достаточно несложен. Программы записываются в свободном
формате, что позволяет сделать их наглядными и удобными
для изучения.
Слово с наибольшим количеством слогов:
параметризации – 7 слогов
Предложение для записи в файл:
Процедурный механизм сочетает в себе простоту реализации
и гибкие средства параметризации.
Введите имя файла для записи предложения: rez.txt
Результат записан в файл rez.txt
Для повтора нажмите 1, любая другая клавиша - выход
Блок схема для задания № 6:
Example_6
Procedure Read_From_File
(Var s:string)
Read_From_File(stroka)
Ввод file_name
Process(stroka,result)
Assign(text_file,file_name)
Save_To_File(result)
Reset(text_file)
Ввод C
IOResult<>0
С=1
да
да
нет
Чтение s из
файла file_name
Файл не
существует
Example_6
Close(text_file)
Procedure Savr_To_File
(s:string)
Procedure Read_From_File
Ввод file_name
Assign(text_file,file_name)
Rewrite(text_file)
Запись s в файл
file_name
Close(text_file)
Procedure Savr_To_File
Halt
Procedure Process(s:string;Var
rez:string)
bukv:=['А'..'Я','а'..'я','Ё','ё']
glasn:=['А,'а','Е','е','Ё','ё','И','и','О',
'о','У','у','Ы','ы','Э','э','Ю','ю','Я','я']
znak:=['.','!','?']
i:=1
count:=0
max_count:=0
Нет
i<=length(s)
да
count:=kon_max_slovnach_max_slov+1
Вывод слова
(s[i] in bukv) and (i=1) or
(s[i] in bukv) and not(s[i-1]
in bukv)
i:=nach_max_slov
да
nach_slov:=i
count:=0
нет
not(s[i-1] in znak) and (i>1)
да
s[i] in glasn
dec(i)
нет
да
inc(count)
nach_predl:=i
i:=kon_max_slov+1
нет
(s[i] in bukv) and
(i=length(s)) or (s[i] in bukv)
and not(s[i+1] in bukv)
not(s[i] in znak) and
(i<length(s))
да
да
kon_slov:=i
inc(i)
нет
count>max_count
нет
да
max_count:=count;
nach_max_slov:=nach_slov;
kon_max_slov:=kon_slov;
Inc(i)
нет
kon_predl:=i
count:=kon_predl-nach_predl+1
rez:=copy(s,nach_predl,count)
Вывод
предложения
Procedure Process
Download