Пример1: Дан двумерный массив. В каждой строке все его элементы, не равные нулю, переписать (сохраняя порядок) в начало строки, а нулевые элементы - в конец массива. Новый массив не заводить.
Этапы решения задачи:
1. Суть одного из алгоритмов решения данной задачи состоит в том чтобы "просматривать" массив построчно и находить в каждой строке пару (0:число), а затем менять их местами между собой и так до тех пор пока в строке таких пар не окажется.
2. Напишем программу на псевдо паскале:
program example1;
var
V:array[1..100,1..100] of integer;
m,n, i,j, c: integer;
flag: boolean;
begin
<ввод размерности массива m*n>
<заполнение ячеек массива>
for i:=1 to m do
repeat
flag:= true;
for j:=1 to n-1 do
if (v[i,j]=0) and (v[i,j+1]<>0) then begin
<поменять их местами>
flag:= false;
end;
until flag;
<Печать массива>
readln;
end.
3.Составим блок схему алгоритма
Детализируем блок "Упорядочиваем 1-ю строку"
Блок схема алгоритма целиком:
4.Приведем программу на языке Паскаль:
program example1;
var
V:array[1..100,1..100] of integer;
m,n, i,j, c: integer;
flag: boolean;
begin
write('Введите размерность массива m-n> '); readln(m,n);
for i:= 1 to m do
for j:= 1 to n do begin
write('V[',i,',',j,']= '); readln(V[i,j]);
end;
for i:=1 to m do
repeat
flag:= true;
for j:=1 to n-1 do
if (v[i,j]=0) and (v[i,j+1]<>0) then begin
c:=v[i,j]; v[i,j]:=v[i,j+1]; v[i,j+1]:=c;
flag:= false;
end;
until flag;
for i:= 1 to m do begin
for j:= 1 to n do write(V[i,j]:2);
writeln
end;
readln;
end.
Контрольные вопросы
- Каким образом определяются переменные типа массив (одномерный и двумерный)?
- Как осуществляется доступ к отдельному элементу одномерного и двумерного массива?
- Каким образом выводятся элементы массива на экран?
- Приведите пример фрагмента программы, который выводит на экран двумерный массив в виде матрицы.
- Сколько чисел можно записать в шестимерный массив X : Array[0..1, 0..1, 0..1, 0..1, 0..1, 0..1] of Integer?
Задания
- Даны целые числа а1, а2, а3. Получить целочисленную матрицу [bij]i,j=1,2,3, для которой bij=ai-3aj.
- Получить [aij]i=1,…10; j=1,…12 - целочисленную матрицу, для которой aij=i+2j.
- Дано натуральное число n. Получить действительную матрицу [aij]i, j=1,…n, для которой aij= .
Дана действительная квадратная матрица порядка n. Найти наибольшее из значений элементов, расположенных в заштрихованной части матрицы.
а) б) в) г)
- Дана квадратная вещественная матрица размерности n. Найти количество нулевых элементов, стоящих:
выше главной диагонали;
ниже главной диагонали;
выше и ниже побочной.
- Дана вещественная матрица размерности n * m. По матрице получить логический вектор, присвоив его k-ому элементу значение True , если выполнено указанное условие и значение False иначе:
- все элементы k столбца нулевые;
- элементы k строки матрицы упорядочены по убыванию;
- k строка массива симметрична.
- Дана вещественная матрица размерности n * m. Сформировать вектор b, в котором элементы вычисляются как:
- произведение элементов соответствующих строк;
- среднее арифметическое соответствующих столбцов;
- разность наибольших и наименьших элементов соответствующих строк;
- значения первых отрицательных элементов в столбце.
- Дан двухмерный массив A[1..m,1..n]. Написать программу построения одномерного массива B[1..m], элементы которого соответственно равны а) суммам элементов строк, б) произведениям элементов строк, в) наименьшим средних арифметических элементов строк.
- Расположить элементы данного массива в обратном порядке (первый элемент меняется с последним, второй - с предпоследним и т.д. до середины; если массив содержит нечетное количество элементов, то средний остается без изменения).
- В данном массиве поменять местами элементы, стоящие на нечетных местах, с элементами, стоящими на четных местах.
Задачи повышенной сложности
- В массиве А[1..N,1..N] определить номера строки и столбца какой-нибудь седловой точки. Некоторый элемент массива называется седловой точкой, если он является одновременно наименьшим в своей строке и наибольшим в своем столбце.
- Массив А[1..5,1..7] содержит вещественные числа. Требуется ввести целое число K и вычислить сумму элементов А[I,J], для которых I+J=К. Прежде, однако следует убедиться, что значение К позволяет найти решение, в противном случае нужно напечатать сообщение об ошибке.
- Дан массив A[1..N,1..N]. Составить программу, которая прибавила бы каждому элементу данной строки элемент, принадлежащий этой строке и главной диагонали.
- Дана матрица NxM. Переставляя ее строки и столбцы, переместить наибольший элемент в верхний левый угол. Определить можно ли таким же образом поместить минимальный элемент в нижний правый угол.
- Заполнить двухмерный массив Т[1..n,1..n] последовательными целыми числами от 1 до n 52 0, расположенными по спирали, начиная с левого верхнего угла и продвигаясь по часовой стрелке:
1 2 3 4 5 6
20 21 22 23 24 7
19 32 33 34 25 8
18 31 36 35 26 9
30 29 28 27 10
15 14 13 12 11
Элемент двухмерного массива называется локальным минимумом, если он строго меньше всех имеющихся у него соседей. Подсчитать количество локальных минимумов заданной матрицы размером NxN найти максимум среди всех локальных минимумов.
Назад
На главную
2016-06-29 21:36:22 Денис прошу помочь с написанием программ по массивам
Вводится одномерный вещественный массив фиксированной длины, состоящий из
«N» элементов (конкретное значение N для каждого студента индивидуально
задается преподавателем). Требуется: 1) Вывести исходный массив в строку
(например, 23.5 45.1 и т.д.). 2) Поменять местами элементы массива по следующему
закону: an ↔ a1, далее an-1 ↔ a2 и т.д. Вывести измененный массив в том же виде что
и исходный, но со следующей строки.
Оставить комментарий:
|