Файл: Контроль обучения 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, состоящая из натуральных чисел. Зеркально отразить ее элементы относительно побочной диагонали. Вывести результат на экран.
Рассмотрим матрицу 33 и посмотрим, что происходит с элементами при зеркальном отображении:

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– вспомогательная переменная.
Алгоритм решения задачи:

  1. вводим размеры массива A и присваиваем значения его элементам;

  2. присваиваем значения элементам матрицы 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 – переменная цикла.
Алгоритм решения задачи:

  1. цикл for i:='A' to 'z' do определяет, какую букву выводим на печать;

  2. внутренний цикл for j:=1 to k do определяет, сколько раз будет печататься буква;

  3. выводим заданную букву k раз на экран;

  4. после вывода всех букв закрываем строку оператором 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 – множество знаков препинания.


Алгоритм решения задачи:

  1. задаем значение множества m – множества знаков препинания;

  2. вводим строку str с клавиатуры;

  3. цикл for i:=1 to l do осуществляет построение вспомогательной строки без знаков препинания: берем отдельный символ строки и проверяем, является ли он знаком препинания. Если да, то присоединяем этот символ к новой вспомогательной строке. Если нет, то переходим к следующему элементу строки;

  4. первоначальную строку заменяем на вспомогательную;

  5. выводим сроку на экран.



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 – вспомогательная переменная.
Алгоритм решения задачи:

  1. вводим строку str и присваиваем значение вспомогательной переменной s1:=str;

  2. определяем местоположение первой точки в тексте; если точка есть, то вырезаем из s1 текст до нее;

  3. ищем последнюю точку в цикле while i<>0 do; если она есть, то значение переменной m указывает на ее местоположение;

  4. в зависимости от присутствия точек выделяем подстроку 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 – счетчик цифр.
Алгоритм решения задачи:

  1. вводим строку s1;

  2. организуем в строке поиск цифр до тех пор, пока не встретим конец строчки или не обнаружим наличие ошибки в арифметическом выражении;

  3. если встречается цифра, то добавляем ее к общей сумме цифр;

  4. после определения суммы цифр, определяем, кратна ли она на трем;

  5. в зависимости от полученного результата выводим ответ на экран.


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 – счетчик слов.
Алгоритм решения задачи:

  1. вводим строку s;

  2. на каждом шаге внешнего цикла отыскиваем очередное слово в строке и увеличиваем счетчик слов;

  3. выводим результат на экран.


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 – длина наименьшего слова.
Алгоритм решения задачи:

  1. вводим строку s;

  2. устанавливаем начальные значения max и min;

  3. организуем внешний цикл для поиска очередного слова в строке;

  4. найдя слово, определяем его длину и при необходимости корректируем max и min;

  5. выводим результат на экран.


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 – строка текста.
Для решения задачи:

  1. вводим строку s;

  2. найдем пару стоящих рядом точек, удалим одну из них; повторим поиск. И так до тех пор, пока в строке не окажется ни одной такой пары точек;

  3. выводим результат на экран.



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 (фактический параметр).

Алгоритм решения задачи:

  1. создаем функцию count, подсчитывающую общее количество цифр и знаков ‘+’, ‘*’, ‘–‘ в заданной строке;

  2. вводим строку s1;

  3. вызываем функцию count и выводим значение счетчика k1 на экран;

  4. завершаем работу программы.