Файл: Контроль обучения 4 Первое контрольное задание 5 Второе контрольное задание 31.doc
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 12.01.2024
Просмотров: 143
Скачиваний: 3
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
jm:=1;
for j:=1 to m do
if min > a[i,j]
then
begin
jm:=j;
min:=a[i,j];
end;
a[i,jm]:=a[i,1];
a[i,1]:=min;
end;
for i:=1 to n do {вывод матрицы на экран в виде таблицы}
begin
for j:=1 to m do
write(a[i,j]:4);
writeln;
end
end.
6. Дана квадратная матрица NN, состоящая из натуральных чисел. Зеркально отразить ее элементы относительно побочной диагонали. Вывести результат на экран.
Рассмотрим матрицу 33 и посмотрим, что происходит с элементами при зеркальном отображении:
A11 A12 A13 A33 A23 A13
A21 A22 A23 <-> A32 A22 A12
A31 A32 A33 A31 A21 A11
Если считать, что после преобразования у нас появилась новая матрица B, то соответствие между элементами устанавливается следующим образом:
B11 <-> A33
B12 <-> A23
B21 <-> A32
B22 <-> A22 и т.д., т.е. B[I,J] <-> A[L,M]
Внимательно изучив соответствие, можно утверждать, что для элементов матрицы NxM справедлива следующая система уравнений:
I+M = N+1,
J+L = N+1.
Отсюда правило преобразования элементов выглядит следующим образом:
B[I,J] = A[N+1–J,N+1–I].
Переменные:
a, b – двумерные массивы;
m – количество строк и столбцов массива;
i, j – переменные цикла;
k– вспомогательная переменная.
Алгоритм решения задачи:
Программа, решающая данную задачу, выглядит так:
const n=100;
var a,b : array [1..n] of integer;
k, m, i, j : integer;
begin
write('Введите размер матрицы m=');
readln(m);
writeln('Исходная матрица');
k:=1;
for i:=1 to m do
for j:=1 to m do
begin
a[i,j]:=k; k:=k+1;
if j
else writeln(a[i,j]:4)
end;
writeln('Матрица после преобразования');
for i:=1 to m do
for j:=1 to m do
begin
b[i,j]:= a[m+1–j, m+1–i];
if j
else writeln(b[i,j]:4)
end;
end.
7. Вычислить: а) С = A + B
Создадим две процедуры:
tab_in(var a1 : mas) – для ввода элементов массива с клавиатуры. Параметр а1 – формируемый массив;
tab_out(var b1 : mas) – для вывода массива на экран. Параметр b1 – имя выводимого массива.
type mas=array [1..40,1..40] of real;
vec=array[1..40] of real;
var a,b,c : mas;
x,y : vec;
i, j, n, k : integer;
r, s : real;
procedure tab_in(var a1 : mas);
var i, j : integer;
begin
for i:=1 to n do
for j:=1 to n do
read(a1[i,j]);
writeln;
end;
procedure tab_out(var b1 : mas);
var i,j:integer;
begin
for i:=1 to n do
begin
for j:=1 to n do
write(b1[i,j]:7:3);
writeln;
end;
end;
begin
writeln('Введите размер матрицы');
readln(n);
writeln('Введите матрицу A');
tab_in(a);
writeln('Введите матрицу B');
tab_in(b);
writeln('Матрица A');
tab_out(a);
writeln('Матрица B');
tab_out(b);
for i:=1 to n do
for j:=1 to n do
c[i,j]:=a[i,j]+b[i,j];
writeln('Полученная матрица C=A+B');
tab_out(c);
end.
б) y = A * x
Основная программа
begin
writeln('Введите размер матрицы');
readln(n);
writeln('Введите матрицу A');
tab_in(a);
writeln('Введите вектор x');
for i:=1 to n do read(x[i]);
writeln;
writeln('Матрица A');
tab_out(a);
writeln('Введенный вектор x');
for i:=1 to n do write(x[i]:7:2);
writeln;
for i:=1 to n do
begin
s:=0;
for j:=1 to n do
s:=s+A[i,j]*x[j];
y[i]:=s
end;
writeln('Полученный вектор y=A*x');
for i:=1 to n do
write (y[i]:7:3);
writeln;
end.
в) С = A * B
Основная программа
begin
writeln('Введите размер матрицы');
readln(n);
writeln('Введите матрицу A');
tab_in(a);
writeln('Введите матрицу B');
tab_in(b);
writeln('Матрица A');
tab_out(a);
writeln('Матрица B');
tab_out(b);
for i:=1 to n do
for j:=1 to n do
begin
s:=0;
for k:=1 to n do
s:=s+a[i,k]*b[k,j];
c[i,j]:=s;
end;
writeln('Полученная матрица C=A+B');
tab_out(c);
end.
г) транспонированную матрицу B
Основная программа
begin
writeln('Введите размер матрицы'); readln(n);
writeln('Введите матрицу B'); tab_in(b);
writeln('Матрица B'); tab_out(b);
for i:=1 to n–1 do
for j:=i+1 to n do
begin
r:=b[i,j]; b[i,j]:=b[j,i]; b[j,i]:=r;
end;
writeln;
writeln('Полученная транспонированная матрица B');
tab_out(b);
end.
СТРОКОВЫЙ ТИП И МНОЖЕСТВА
8. Вывести в одну строку ABBCCCDDDDE .... ZZ...Z.
Переменные:
i – переменная цикла; определяет, какая буква выводится;
k – количество повторений буквы;
j – переменная цикла.
Алгоритм решения задачи:
var i : char;
k,j : integer;
begin
k:=1;
for i:= 'A' to 'Z' do
begin
for j:=1 to k do write(i);
k:=k+1;
end;
writeln;
end.
9. Дана строка символов. Удалить из нее все знаки препинания.
Переменные:
i – переменная цикла;
L – длина строки;
str – строка текста;
str1 – вспомогательная строка;
m – множество знаков препинания.
Алгоритм решения задачи:
var str, str1 : string;
L, i : integer;
m : set of char;
begin
m:=['.', ',', '!', ':', ';', '?', '-'];
writeln('Введите текст');
readln(str); L:=length(str); str1:='';
for i:=1 to L do
if not(str[i] in m) then str1:=str1+str[i];
str:=str1;
writeln('Преобразованный текст ', str);
end.
10. Дана строка символов. Выделить подстроку между первой и последней точкой.
Переменные:
i – номер позиции, которая соответствует точке;
j – местоположение первой точки;
m – местоположение последней точки;
str – строка текста;
s1 – вспомогательная переменная.
Алгоритм решения задачи:
var str, s1 : string;
i, m, j : integer;
begin
writeln('Введите текст');
readln(str);
s1:=str; i:=pos('.',s1); j:=i; m:=0;
if (i<>0) then
begin
while i<>0 do
begin delete(s1,1,i); m:=m+i; i:=pos('.',s1); end;
if m<>j then
begin
s1:=copy(str,j+1,m–j–1);
writeln('Часть текста между 1-й и последней точкой');
writeln(s1);
end
else writeln('В тексте только одна точка');
end
else writeln('В тексте нет ни одной точки');
end.
11. Дана строка символов. Определить, является ли она записью десятичного числа, кратного трем.
Необходимо удостовериться, что введенная строка состоит только из цифр, т.е. может быть преобразована в десятичное число. Само преобразование цифры в число сделать очень просто. Поскольку коды символьных переменных – цифр – следуют один за другим, то функция ord в выражении ord(s1[i])–ord('0') поможет нам сделать это.
Переменные:
i – переменная цикла;
s1 – строка цифр;
m – длина строчки;
k – счетчик цифр.
Алгоритм решения задачи:
var s1 : string;
k, i, m : integer;
begin
writeln('Введите строку');
readln(s1);
m:=length(s1);
k:=0; i:=1;
repeat
case s1[i] of
'0'..'9' : k:=k+(ord(s1[i])–ord('0'));
' ' : ;
else k:=–1;
end;
i:=i+1;
until (i>m) or (k<0);
if k mod 3 = 0
then writeln('Это десятичное число, кратное 3')
else writeln('Это не десятичное число, кратное 3')
end.
12. Дана строка символов. Группы символов в ней между группами пробелов считаются словами. Посчитать, сколько слов содержит данная строка.
Переменные:
i – вспомогательная переменная;
s – строка текста;
k – счетчик слов.
Алгоритм решения задачи:
var s: string; i,k: integer;
begin
writeln('Введите строку');
readln(s);
k:=0; i:=1;
while i<=length(s) do
begin
{пропускаем пробелы}
while (s[i]=' ') and (i<=length(s)) do i := i+1;
if i<=length(s) then k := k+1;
{ищем новый пробел}
while (s[i]<>' ') and (i<=length(s)) do i := i+1;
end;
writeln('количество слов =',k)
end.
13. Дана строка символов. Группы символов в ней между группами пробелов считаются словами. Определить длину самого короткого и самого длинного слова.
Переменные:
i – индекс очередного символа в строке;
s – строка текста;
beginStr и endStr – начало и конец слова;
len – длина слова;
max – длина наибольшего слова;
min – длина наименьшего слова.
Алгоритм решения задачи:
var s:string;
i,min,max,beginStr,endStr,len:integer;
begin
writeln('Введите строку');
readln(s);
max:=0; min:=255;
i:=1;
while i<=length(s) do
begin
{пропускаем пробелы}
while (s[i]=' ') and (i<=length(s)) do i:=i+1;
if i<=length(s) then begin
beginStr:=i;
{нашли начало слова, ищем его конец}
while (s[i]<>' ') and (i<=length(s)) do
i:=i+1;
endStr:=i–1;
writeln(beginStr,'–',endStr);
len:=endStr–beginStr+1;
if len>max then max:=len;
if len
end
end;
writeln('длина самого длинного слова =',max);
writeln('длина самого короткого слова =',min)
end.
14. Дана строка. Преобразовать строку, заменив в ней каждую группу стоящих рядом точек одной точкой.
Переменные:
s – строка текста.
Для решения задачи:
var s : string;
begin
writeln('Введите строку');
readln(s);
while pos('..', s) <> 0 do delete (s, pos('..', s), 1);
writeln('Полученная строка : ', s);
end.
15. Присвоить литерным переменным с2, с1 и с0 соответственно левую, среднюю и правую цифры трехзначного числа k.
var c0, c1, c2 : char;
n0, k, d : integer;
begin
writeln('Введите трехзначное число');
readln(k);
n0:=ord('0');
d:=k div 100; c2:=chr(n0+d);
d:=k mod 100 div 10; c1:=chr(n0+d);
d:=k mod 10; c0:=chr(n0+d);
writeln('c2= ', c2);
writeln('c1= ',c1);
writeln('c0= ',c0);
end.
16. Используя только литерный ввод, т.е. процедуру readln(c), где с – литерная переменная, ввести непустую последовательность цифр, перед которой может находиться знак «+» или «–» и за которой следует пробел, и, получив соответствующее число, присвоить его целой переменной k.
var c : char;
sign, n0, k : integer;
begin
{определение знака числа:}
sign:=1;
readln(c);
if c='–' then
begin sign:=–1; readln(c) end
else if c='+' then readln(c);
{чтение цифр (первая – в c) и вычисление абсолютной величины числа k по схеме Горнера:}
n0:=ord('0'); k:=0;
repeat
k:=10*k+ord(c)–n0;
readln(c)
until c=' ';
{учет знака:}
k:=sign*k; writeln(k);
end.
17. Программа. Напечатать заданную непустую строку:
а) удалив из нее все цифры и удвоив знаки «+» и «–»:
var s : string;
i : integer;
begin
writeln('Введите строку:');
readln(s);
for i:=1 to length(s) do
if (s[i]='+')or(s[i]='–') then write(s[i],s[i])
else if (s[i]<'0')or(s[i]>'9') then write(s[i]);
writeln
end.
б) удалив из нее все знаки «+», непосредственно за которыми идет цифра:
var a, b : char; {a – очередная литера строки, b – следующая}
s : string;
i : integer;
begin
writeln('Введите строку:');
readln(s);
for i:=1 to length(s) do
begin
a:=s[i];
if a<>'+' then write(a)
else if i
b:=s[i+1];
if (b<'0') or (b>'9') then write(a)
end
else write(a);
end;
writeln
end.
МНОЖЕСТВА
18. type str=string[100];
Описать функцию count(s), подсчитывающую общее количество цифр и знаков '+', '–' и '*', входящих в строку s.
Переменные:
а) в функции count:
s – строка (формальный параметр);
i – счетчик цикла (локальная переменная);
k – общее количество цифр и знаков ‘+’, ‘*’, ‘–‘ в заданной строке (локальная переменная);
б) в основной программе:
s1 – введенная строка (локальная переменная);
k1 – общее количество цифр и знаков ‘+’, ‘*’, ‘–‘ в заданной строке s1 (фактический параметр).
Алгоритм решения задачи:
for j:=1 to m do
if min > a[i,j]
then
begin
jm:=j;
min:=a[i,j];
end;
a[i,jm]:=a[i,1];
a[i,1]:=min;
end;
for i:=1 to n do {вывод матрицы на экран в виде таблицы}
begin
for j:=1 to m do
write(a[i,j]:4);
writeln;
end
end.
6. Дана квадратная матрица NN, состоящая из натуральных чисел. Зеркально отразить ее элементы относительно побочной диагонали. Вывести результат на экран.
Рассмотрим матрицу 33 и посмотрим, что происходит с элементами при зеркальном отображении:
A11 A12 A13 A33 A23 A13
A21 A22 A23 <-> A32 A22 A12
A31 A32 A33 A31 A21 A11
Если считать, что после преобразования у нас появилась новая матрица B, то соответствие между элементами устанавливается следующим образом:
B11 <-> A33
B12 <-> A23
B21 <-> A32
B22 <-> A22 и т.д., т.е. B[I,J] <-> A[L,M]
Внимательно изучив соответствие, можно утверждать, что для элементов матрицы NxM справедлива следующая система уравнений:
I+M = N+1,
J+L = N+1.
Отсюда правило преобразования элементов выглядит следующим образом:
B[I,J] = A[N+1–J,N+1–I].
Переменные:
a, b – двумерные массивы;
m – количество строк и столбцов массива;
i, j – переменные цикла;
k– вспомогательная переменная.
Алгоритм решения задачи:
-
вводим размеры массива A и присваиваем значения его элементам; -
присваиваем значения элементам матрицы B по представленным выше формулам и выводим их на экран.
Программа, решающая данную задачу, выглядит так:
const n=100;
var a,b : array [1..n] of integer;
k, m, i, j : integer;
begin
write('Введите размер матрицы m=');
readln(m);
writeln('Исходная матрица');
k:=1;
for i:=1 to m do
for j:=1 to m do
begin
a[i,j]:=k; k:=k+1;
if j
else writeln(a[i,j]:4)
end;
writeln('Матрица после преобразования');
for i:=1 to m do
for j:=1 to m do
begin
b[i,j]:= a[m+1–j, m+1–i];
if j
else writeln(b[i,j]:4)
end;
end.
7. Вычислить: а) С = A + B
Создадим две процедуры:
tab_in(var a1 : mas) – для ввода элементов массива с клавиатуры. Параметр а1 – формируемый массив;
tab_out(var b1 : mas) – для вывода массива на экран. Параметр b1 – имя выводимого массива.
type mas=array [1..40,1..40] of real;
vec=array[1..40] of real;
var a,b,c : mas;
x,y : vec;
i, j, n, k : integer;
r, s : real;
procedure tab_in(var a1 : mas);
var i, j : integer;
begin
for i:=1 to n do
for j:=1 to n do
read(a1[i,j]);
writeln;
end;
procedure tab_out(var b1 : mas);
var i,j:integer;
begin
for i:=1 to n do
begin
for j:=1 to n do
write(b1[i,j]:7:3);
writeln;
end;
end;
begin
writeln('Введите размер матрицы');
readln(n);
writeln('Введите матрицу A');
tab_in(a);
writeln('Введите матрицу B');
tab_in(b);
writeln('Матрица A');
tab_out(a);
writeln('Матрица B');
tab_out(b);
for i:=1 to n do
for j:=1 to n do
c[i,j]:=a[i,j]+b[i,j];
writeln('Полученная матрица C=A+B');
tab_out(c);
end.
б) y = A * x
Основная программа
begin
writeln('Введите размер матрицы');
readln(n);
writeln('Введите матрицу A');
tab_in(a);
writeln('Введите вектор x');
for i:=1 to n do read(x[i]);
writeln;
writeln('Матрица A');
tab_out(a);
writeln('Введенный вектор x');
for i:=1 to n do write(x[i]:7:2);
writeln;
for i:=1 to n do
begin
s:=0;
for j:=1 to n do
s:=s+A[i,j]*x[j];
y[i]:=s
end;
writeln('Полученный вектор y=A*x');
for i:=1 to n do
write (y[i]:7:3);
writeln;
end.
в) С = A * B
Основная программа
begin
writeln('Введите размер матрицы');
readln(n);
writeln('Введите матрицу A');
tab_in(a);
writeln('Введите матрицу B');
tab_in(b);
writeln('Матрица A');
tab_out(a);
writeln('Матрица B');
tab_out(b);
for i:=1 to n do
for j:=1 to n do
begin
s:=0;
for k:=1 to n do
s:=s+a[i,k]*b[k,j];
c[i,j]:=s;
end;
writeln('Полученная матрица C=A+B');
tab_out(c);
end.
г) транспонированную матрицу B
Основная программа
begin
writeln('Введите размер матрицы'); readln(n);
writeln('Введите матрицу B'); tab_in(b);
writeln('Матрица B'); tab_out(b);
for i:=1 to n–1 do
for j:=i+1 to n do
begin
r:=b[i,j]; b[i,j]:=b[j,i]; b[j,i]:=r;
end;
writeln;
writeln('Полученная транспонированная матрица B');
tab_out(b);
end.
СТРОКОВЫЙ ТИП И МНОЖЕСТВА
8. Вывести в одну строку ABBCCCDDDDE .... ZZ...Z.
Переменные:
i – переменная цикла; определяет, какая буква выводится;
k – количество повторений буквы;
j – переменная цикла.
Алгоритм решения задачи:
-
цикл for i:='A' to 'z' do определяет, какую букву выводим на печать; -
внутренний цикл for j:=1 to k do определяет, сколько раз будет печататься буква; -
выводим заданную букву k раз на экран; -
после вывода всех букв закрываем строку оператором writeln.
var i : char;
k,j : integer;
begin
k:=1;
for i:= 'A' to 'Z' do
begin
for j:=1 to k do write(i);
k:=k+1;
end;
writeln;
end.
9. Дана строка символов. Удалить из нее все знаки препинания.
Переменные:
i – переменная цикла;
L – длина строки;
str – строка текста;
str1 – вспомогательная строка;
m – множество знаков препинания.
Алгоритм решения задачи:
-
задаем значение множества m – множества знаков препинания; -
вводим строку str с клавиатуры; -
цикл for i:=1 to l do осуществляет построение вспомогательной строки без знаков препинания: берем отдельный символ строки и проверяем, является ли он знаком препинания. Если да, то присоединяем этот символ к новой вспомогательной строке. Если нет, то переходим к следующему элементу строки; -
первоначальную строку заменяем на вспомогательную; -
выводим сроку на экран.
var str, str1 : string;
L, i : integer;
m : set of char;
begin
m:=['.', ',', '!', ':', ';', '?', '-'];
writeln('Введите текст');
readln(str); L:=length(str); str1:='';
for i:=1 to L do
if not(str[i] in m) then str1:=str1+str[i];
str:=str1;
writeln('Преобразованный текст ', str);
end.
10. Дана строка символов. Выделить подстроку между первой и последней точкой.
Переменные:
i – номер позиции, которая соответствует точке;
j – местоположение первой точки;
m – местоположение последней точки;
str – строка текста;
s1 – вспомогательная переменная.
Алгоритм решения задачи:
-
вводим строку str и присваиваем значение вспомогательной переменной s1:=str; -
определяем местоположение первой точки в тексте; если точка есть, то вырезаем из s1 текст до нее; -
ищем последнюю точку в цикле while i<>0 do; если она есть, то значение переменной m указывает на ее местоположение; -
в зависимости от присутствия точек выделяем подстроку s1:=copy(str,j+1,m–j–1) и выводим результат на экран.
var str, s1 : string;
i, m, j : integer;
begin
writeln('Введите текст');
readln(str);
s1:=str; i:=pos('.',s1); j:=i; m:=0;
if (i<>0) then
begin
while i<>0 do
begin delete(s1,1,i); m:=m+i; i:=pos('.',s1); end;
if m<>j then
begin
s1:=copy(str,j+1,m–j–1);
writeln('Часть текста между 1-й и последней точкой');
writeln(s1);
end
else writeln('В тексте только одна точка');
end
else writeln('В тексте нет ни одной точки');
end.
11. Дана строка символов. Определить, является ли она записью десятичного числа, кратного трем.
Необходимо удостовериться, что введенная строка состоит только из цифр, т.е. может быть преобразована в десятичное число. Само преобразование цифры в число сделать очень просто. Поскольку коды символьных переменных – цифр – следуют один за другим, то функция ord в выражении ord(s1[i])–ord('0') поможет нам сделать это.
Переменные:
i – переменная цикла;
s1 – строка цифр;
m – длина строчки;
k – счетчик цифр.
Алгоритм решения задачи:
-
вводим строку s1; -
организуем в строке поиск цифр до тех пор, пока не встретим конец строчки или не обнаружим наличие ошибки в арифметическом выражении; -
если встречается цифра, то добавляем ее к общей сумме цифр; -
после определения суммы цифр, определяем, кратна ли она на трем; -
в зависимости от полученного результата выводим ответ на экран.
var s1 : string;
k, i, m : integer;
begin
writeln('Введите строку');
readln(s1);
m:=length(s1);
k:=0; i:=1;
repeat
case s1[i] of
'0'..'9' : k:=k+(ord(s1[i])–ord('0'));
' ' : ;
else k:=–1;
end;
i:=i+1;
until (i>m) or (k<0);
if k mod 3 = 0
then writeln('Это десятичное число, кратное 3')
else writeln('Это не десятичное число, кратное 3')
end.
12. Дана строка символов. Группы символов в ней между группами пробелов считаются словами. Посчитать, сколько слов содержит данная строка.
Переменные:
i – вспомогательная переменная;
s – строка текста;
k – счетчик слов.
Алгоритм решения задачи:
-
вводим строку s; -
на каждом шаге внешнего цикла отыскиваем очередное слово в строке и увеличиваем счетчик слов; -
выводим результат на экран.
var s: string; i,k: integer;
begin
writeln('Введите строку');
readln(s);
k:=0; i:=1;
while i<=length(s) do
begin
{пропускаем пробелы}
while (s[i]=' ') and (i<=length(s)) do i := i+1;
if i<=length(s) then k := k+1;
{ищем новый пробел}
while (s[i]<>' ') and (i<=length(s)) do i := i+1;
end;
writeln('количество слов =',k)
end.
13. Дана строка символов. Группы символов в ней между группами пробелов считаются словами. Определить длину самого короткого и самого длинного слова.
Переменные:
i – индекс очередного символа в строке;
s – строка текста;
beginStr и endStr – начало и конец слова;
len – длина слова;
max – длина наибольшего слова;
min – длина наименьшего слова.
Алгоритм решения задачи:
-
вводим строку s; -
устанавливаем начальные значения max и min; -
организуем внешний цикл для поиска очередного слова в строке; -
найдя слово, определяем его длину и при необходимости корректируем max и min; -
выводим результат на экран.
var s:string;
i,min,max,beginStr,endStr,len:integer;
begin
writeln('Введите строку');
readln(s);
max:=0; min:=255;
i:=1;
while i<=length(s) do
begin
{пропускаем пробелы}
while (s[i]=' ') and (i<=length(s)) do i:=i+1;
if i<=length(s) then begin
beginStr:=i;
{нашли начало слова, ищем его конец}
while (s[i]<>' ') and (i<=length(s)) do
i:=i+1;
endStr:=i–1;
writeln(beginStr,'–',endStr);
len:=endStr–beginStr+1;
if len>max then max:=len;
if len
end
end;
writeln('длина самого длинного слова =',max);
writeln('длина самого короткого слова =',min)
end.
14. Дана строка. Преобразовать строку, заменив в ней каждую группу стоящих рядом точек одной точкой.
Переменные:
s – строка текста.
Для решения задачи:
-
вводим строку s; -
найдем пару стоящих рядом точек, удалим одну из них; повторим поиск. И так до тех пор, пока в строке не окажется ни одной такой пары точек; -
выводим результат на экран.
var s : string;
begin
writeln('Введите строку');
readln(s);
while pos('..', s) <> 0 do delete (s, pos('..', s), 1);
writeln('Полученная строка : ', s);
end.
15. Присвоить литерным переменным с2, с1 и с0 соответственно левую, среднюю и правую цифры трехзначного числа k.
var c0, c1, c2 : char;
n0, k, d : integer;
begin
writeln('Введите трехзначное число');
readln(k);
n0:=ord('0');
d:=k div 100; c2:=chr(n0+d);
d:=k mod 100 div 10; c1:=chr(n0+d);
d:=k mod 10; c0:=chr(n0+d);
writeln('c2= ', c2);
writeln('c1= ',c1);
writeln('c0= ',c0);
end.
16. Используя только литерный ввод, т.е. процедуру readln(c), где с – литерная переменная, ввести непустую последовательность цифр, перед которой может находиться знак «+» или «–» и за которой следует пробел, и, получив соответствующее число, присвоить его целой переменной k.
var c : char;
sign, n0, k : integer;
begin
{определение знака числа:}
sign:=1;
readln(c);
if c='–' then
begin sign:=–1; readln(c) end
else if c='+' then readln(c);
{чтение цифр (первая – в c) и вычисление абсолютной величины числа k по схеме Горнера:}
n0:=ord('0'); k:=0;
repeat
k:=10*k+ord(c)–n0;
readln(c)
until c=' ';
{учет знака:}
k:=sign*k; writeln(k);
end.
17. Программа. Напечатать заданную непустую строку:
а) удалив из нее все цифры и удвоив знаки «+» и «–»:
var s : string;
i : integer;
begin
writeln('Введите строку:');
readln(s);
for i:=1 to length(s) do
if (s[i]='+')or(s[i]='–') then write(s[i],s[i])
else if (s[i]<'0')or(s[i]>'9') then write(s[i]);
writeln
end.
б) удалив из нее все знаки «+», непосредственно за которыми идет цифра:
var a, b : char; {a – очередная литера строки, b – следующая}
s : string;
i : integer;
begin
writeln('Введите строку:');
readln(s);
for i:=1 to length(s) do
begin
a:=s[i];
if a<>'+' then write(a)
else if i
b:=s[i+1];
if (b<'0') or (b>'9') then write(a)
end
else write(a);
end;
writeln
end.
МНОЖЕСТВА
18. type str=string[100];
Описать функцию count(s), подсчитывающую общее количество цифр и знаков '+', '–' и '*', входящих в строку s.
Переменные:
а) в функции count:
s – строка (формальный параметр);
i – счетчик цикла (локальная переменная);
k – общее количество цифр и знаков ‘+’, ‘*’, ‘–‘ в заданной строке (локальная переменная);
б) в основной программе:
s1 – введенная строка (локальная переменная);
k1 – общее количество цифр и знаков ‘+’, ‘*’, ‘–‘ в заданной строке s1 (фактический параметр).
Алгоритм решения задачи:
-
создаем функцию count, подсчитывающую общее количество цифр и знаков ‘+’, ‘*’, ‘–‘ в заданной строке; -
вводим строку s1; -
вызываем функцию count и выводим значение счетчика k1 на экран; -
завершаем работу программы.