ПРИМЕРЫ 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(xx+1.67x)+exp(1/3ln(abs(x)/3 +sqr(sin(72pi/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