Задача: Циклы в массивах и строках
Описание
Характеристики решённой задачи
Список файлов
Задача:
Задана матрица A (n, n) действительных чисел. "Перевернуть" в ней главную и побочную диагонали (переписать цифры в обратном порядке).
Алгоритм решения задачи:
Чтобы у матрицы были диагонали, она должна быть квадратной, т.е. n = m.
Элементы главной диагонали имеют индекс [i,i]. Побочной [i,n-i+1].
Для того, чтобы "перевернуть" диагонали, не надо перебирать всю матрицу. Достаточно перебрать половину
Программа на языке Паскаль:
const
n = 5;
var
arr: array[1..n,1..n] of real;
i,j: byte;
a: real;
begin
randomize;
for i:=1 to n do begin
for j:=1 to n do begin
arr[i,j] := random();
write(arr[i,j]:4:1);
end;
writeln;
end;
writeln;
for i:=1 to n div 2 do
for j:=1 to n div 2 do
if i = j then begin
a := arr[i,j];
arr[i,j] := arr[n-i+1,n-j+1];
arr[n-i+1,n-j+1] := a;
end;
for i:= (n div 2)+1 to n do
for j:=1 to n div 2 do
if j = n-i+1 then begin
a := arr[i,j];
arr[i,j] := arr[j,i];
arr[j,i] := a;
end;
for i:=1 to n do begin
for j:=1 to n do
write(arr[i,j]:4:1);
writeln;
end;
readln;
end.
Задача:
Вводится число. Преобразовать его в другое число, цифры которого будут следовать в обратном порядке по сравнению с введенным числом.
Описание переменных:
n, m - первое и второе числа;
a - хранение очередного разряда.
Алгоритм решения задачи:
Алгоритм решения задачи сводится к следующему циклу: 1) взять последнюю цифру в первом числе; 2) записать ее в конец второго; 3) убрать последнюю цифру из первого числа. При этом второе число изначально не должно иметь значащих разрядов. Таким образом последняя цифра первого числа окажется первой цифрой во втором; предпоследняя цифра первого числа - второй во втором числе; и т. д.
Находим остаток (mod) от деления исходного числа n на 10. Результат сохраняем в переменной a.
Делим n нацело на 10, тем самым избавляемся от младшего разряда.
На каждом шаге разрядность m надо увеличивать на единицу, т.е. умножать на 10. (Например если было число 56, то, умножив его на 10, получим 560. Далее следует прибавить остаток из переменной a, например, 3. В итоге получим 563.) Получаем формулу: m = m * 10 + a.
Программа на языке Паскаль:
var
n, m: longint;
a: byte;
begin
readln(n);
m := 0;
while n>0 do begin
a := n mod 10;
n := n div 10;
m := m*10 + a;
end;
writeln(m);
readln;
end.
Задача:
Двумерный массив MxN заполнить случайными символами английского алфавита (заглавные). Вывести на экран сколько раз встречается каждый символ.
Алгоритм решения задачи:
Программа написана с учетом того, что неизвестно какие номера по таблице символов имеют буквы A и Z, а также неизвестна длина алфавита. Это делает программу немного сложнее, но придает ей гибкость (достаточно поменять символы, код менять не надо).
Выражение ord('Z')-ord('A')+1 вычисляет длину диапазона. Например, порядковый номер Z равен 90, A = 65. Тогда 90 - 65 = 25, однако всего букв 26 (границы диапазона входят в него), поэтому следует прибавить единицу.
В массиве let первой букве алфавита соответствует индекс 1, второй - 2 и т. д. Если известно, какой порядковый номер имеет буква, то можно установить соответствие между индексами и номерами: arr[i,j]-ord('A')+1. Например, arr[i,j] равно 67, буква A имеет номер 65. 67 - 65 = 2. 2 + 1 = 3. Т.е. букве C будет соответствовать третий элемент массива let.
Программа на языке Паскаль:
const m = 25; n = 15;
var
arr: array[1..n,1..m] of byte;
let: array[1..30] of byte;
i,j: byte;
begin
randomize;
for i:=1 to n do begin
for j:=1 to m do begin
arr[i,j] := ord('A') + random(ord('Z')-ord('A')+1);
write(chr(arr[i,j]):2)
end;
writeln;
end;
for i:=1 to n do
for j:=1 to m do
let[arr[i,j]-ord('A')+1] := let[arr[i,j]-ord('A')+1] + 1;
for i:=1 to (ord('Z')-ord('A')+1) do begin
write(chr(i+ord('A')-1):3, ' - ', let[i]:2);
if i mod 5 = 0 then
writeln;
end;
readln;
end.
Задача:
Определить из каких цифр состоит число
Программа на языке Паскаль:
var
n:integer;
begin
write('Type integer: ');
readln(n);
if n<0 then
n:=-n; // уничтожение знака числа
repeat
writeln(n mod 10); // вывод последней цифры числа
n:= n div 10; // удаление последней цифры числа
until n=0;
readln
end.