Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 06.03.2009
Сообщений: 17
1

посодействуйте в доработке задачи по массивам и подпрограмм

14.03.2009, 14:48. Показов 1206. Ответов 2
Метки нет (Все метки)

Преподаватель пишет в рецензии:

Не вижу процедур и функций.
Заполнение массива проведено неправильно.
Добавьте в программу комментарии.


ЗАДАНИЕ №3. МАССИВЫ И ПОДПРОГРАММЫ

Результатом выполнения третьего задания, изложенного ниже в двадцати вариантах, должна быть программа, написанная с использованием подпрограмм — не менее двух процедур и одной функции.
Задание в зависимости от варианта связано с действиями либо над матрицей m[n, к] у которой количество строк п и столбцов к может быть от двух до десяти, либо над квадратной матрицей m[n,n], у которой количество строк и столбцов равно п (2<=n<=10). Таким образом, в программе должен быть предусмотрен ввод пользователем количества строк и столбцов матрицы при исполнении программы.
Также, в зависимости от варианта компоненты, матрицы могут быть либо вещественного, либо целого типа. Значения ком¬понент матрицы следует задавать случайным образом в таком диапазоне, чтобы получаемые данные были нетривиальными, т.е. очевидными, не лежащими на поверхности.
В каждом варианте приведён пример аналитического (без использования программирования) решения частной задачи этого варианта. Целью этих примеров является пояснение непонятных мест в задании варианта. Во всех примерах в квадратных скобках указываются номера строк и (или) столбцов компонент матрицы.


Само Задание
Найти суммы компонент целочисленной матрицы m[n,k] в ее четвертях и записать их в одномерный массив v[4]. Если количество строк и (или) столбцов матрицы не четное, то при суммировании компоненты средних строк и (или) столбцов исключить. Заменить значения компонент в четвертях матрицы m[n,k] на 1, если сумма соответствующей четверти окажется нечетной, и не 0, если сумма – нечетная. Найти максимальное значение компонента массива n[4]. Если максимумов в массиве несколько, то запомнить индекс последнего при переборе из максимумов. На экран вывести исходную матрицу m[n,k], массив n[4], измененную матрицу m[n,k], последнюю встречную максимальную компоненту с индексом.
Я написал так:
Program pascal;
Var m:array[1..10,1..10] of integer;
v:array[1..4] of integer;
n,k,i,j,h,g,max,l:integer;
begin
writeln('Введите размерность матрицы m[n,k]');
write('n= ');readln(n);
write('k= ');readln(k);
for i:=1 to n do
for j:=1 to k do begin
write('m[',i,',',j,']= ');
readln(m[i,j]);
end;
writeln('Матрица M');
for i:=1 to n do begin
for j:=1 to k do write(m[i,j],' ');
writeln;
end;
{разбивка по четвертям}
{1 четверть}
for i:=1 to n div 2 do
for j:=1 to k div 2 do v[1]:=v[1]+m[i,j];
if v[1] mod 2 =0 then
for i:=1 to n div 2 do
for j:=1 to k div 2 do m[i,j]:=0
else
for i:=1 to n div 2 do
for j:=1 to k div 2 do m[i,j]:=1;
if n mod 2 <> 0 then h:=n div 2+2
else h:=n div 2+1;
if k mod 2 <> 0 then g:=k div 2+2
else g:=k div 2+1;
{2 четверть}
for i:=1 to n div 2 do
for j:=g to k do v[2]:=v[2]+m[i,j];
if v[2] mod 2 =0 then
for i:=1 to n div 2 do
for j:=g to k do m[i,j]:=0
else
for i:=1 to n div 2 do
for j:=g to k do m[i,j]:=1;
{3 четверть}
for i:=h to n do
for j:=1 to k div 2 do v[3]:=v[3]+m[i,j];
if v[3] mod 2 =0 then
for i:=h to n do
for j:=1 to k div 2 do m[i,j]:=0
else
for i:=h to n do
for j:=1 to k div 2 do m[i,j]:=1;
{4 четверть}
for i:=h to n do
for j:=h to k do v[4]:=v[4]+m[i,j];
if v[4] mod 2 =0 then
for i:=h to n do
for j:=h to k do m[i,j]:=0
else
for i:=h to n do
for j:=h to k do m[i,j]:=1;
writeln('Вектор V');
l:=1;
max:=v[l];
for i:=1 to 4 do begin
write(v[i],' ');
if max<v[i] then begin
max:=v[i];
l:=i;
end;
end;
writeln;
writeln('Максимальный элемент Вектора V: ',max);
writeln('Индекс максимального элемента: ',l);
writeln('Преобразованная Матрица M');
for i:=1 to n do begin
for j:=1 to k do write(m[i,j],' ');
writeln;
end;
write('Нажмите Enter');
readln;
end.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.03.2009, 14:48
Ответы с готовыми решениями:

Посодействуйте в доработке задачи ОПЕРАТОРЫ ЦИКЛОВ
ЗАДАНИЕ №2. ОПЕРАТОРЫ ЦИКЛОВ Задание: Вычислить сумму s значений функции в точках Xj, которые...

Задачи по массивам
Здравствуйте, помогите, пожалуйста, составить программы. Этот сайт моя единственная надежда. 1)...

Задачи по массивам
1) В файле в котором есть целые числа найти число которое встречается чаще всех. Если таких чисел...

Две задачи по массивам
Товарищи програмисты, помогите решить след. задачи: 1) Дан двумерный массив. Найти минимальный...

2
Эксперт С++
3058 / 1400 / 421
Регистрация: 19.01.2009
Сообщений: 3,769
14.03.2009, 15:24 2
Можно переместить код, отвечающий за ввод матрицы в подпрограмму и обозвать ее, например, VvodMasiva(). Код, который распечатывает содержимов матрицы - в процедуру VivodMassiva(). Вот уже две процедуры.
0
Почетный модератор
64087 / 47496 / 32734
Регистрация: 18.05.2008
Сообщений: 115,182
14.03.2009, 20:03 3
Лучший ответ Сообщение было отмечено medic357 как решение

Решение

на 1, если сумма соответствующей четверти окажется нечетной, и не 0, если сумма – нечетная.
Объясните.
И еще в каком порядке считать четверти.

Добавлено через 23 минуты 20 секунд
Короче вот написал, но по своему не люблю ковыряться в чужих длинных кодах, лучше Вы в моем.
Четверти сделал так
1 2
4 3
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
uses crt;
const nmax=20;{максимальный размер матрицы}
type Tmatr=array[1..nmax,1..nmax] of integer;{тип матрицы}
     Tmas=array[1..4] of integer;{тип массива}
procedure Vvod(var x,y:byte; var mt:Tmatr);{создание матрицы}
var i,j:byte;
begin
write('Kolichestvo strok=');readln(x);
write('Kolichestvo stolbcov=');readln(y);
for i:=1 to x do
for j:=1 to y do
read(mt[i,j]);
readln;
clrscr;{очистим экран от ввода}
end;
procedure Vyvod(x,y:byte; var mt:Tmatr);{вывод матриц на экран}
var i,j:byte;
begin
for i:=1 to x do
  begin
    for j:=1 to y do
    write(mt[i,j]:4);
    writeln;
 end;
end;
function Summ(mt:Tmatr;xn,xk,yn,yk:byte):integer;{сумма в четвертях}
var i,j:byte;
    sm:integer;
begin
sm:=0;
for i:=xn to xk do{указываем диапазоны подсчета}
for j:=yn to yk do
sm:=sm+mt[i,j];
Summ:=sm;
end;
procedure Zamena(var mt:Tmatr;xn,xk,yn,yk:byte);{замена элементов}
var i,j,x1,y1:byte;
begin
if odd(Summ(mt,xn,xk,yn,yk))then{если сумма в четверти нечетная}
for i:=xn to xk do
for j:=yn to yk do
mt[i,j]:=0{заменяем на ноль}
else {если четная}
for i:=xn to xk do
for j:=yn to yk do
mt[i,j]:=1;{на единицу}
end;
procedure Vector(x,y:byte;var mt:Tmatr;var ms:Tmas);{создание массива сумм}
var i,j,x1,y1:byte;
begin
x1:=x div 2;{количество строк в четверти}
y1:=y div 2;{количество столбцов}
ms[1]:=Summ(mt,1,x1,1,y1);{первая четверть}
Zamena(mt,1,x1,1,y1);{сразу делаем замену}
ms[2]:=Summ(mt,1,x1,y-y1+1,y);{вторая четверть}
Zamena(mt,1,x1,y-y1+1,y);
ms[3]:=Summ(mt,x-x1+1,x,y-y1+1,y);{третья четверть}
Zamena(mt,x-x1+1,x,y-y1+1,y);
ms[4]:=Summ(mt,x-x1+1,x,1,y-y1);{четвертая}
Zamena(mt,x-x1+1,x,1,y-y1);
writeln('Vector:');
for i:=1 to 4 do
write(ms[i],' ');{выводим массив}
writeln;
end;
Procedure Max(ms:Tmas; var mx:integer;var x:byte);{нахождение максимального}
var i:byte;
begin
mx:=ms[1];x:=1;
for i:=4 downto 1 do{ищем с конца}
if ms[i]>mx then
  begin
    mx:=ms[i];
    x:=i;
  end;
writeln('Max el=',mx,' index=',x);
end;
var m:Tmatr;
    v:Tmas;
    n,k,i:byte;
    mxel:integer;
begin
clrscr;
Vvod(n,k,m);
writeln('Ishodnaya matrica:');
Vyvod(n,k,m);{}
Vector(n,k,m,v);
writeln('Izmenennaya matrica:');
Vyvod(n,k,m);{}
Max(v,mxel,i);
readln
end.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.03.2009, 20:03

Посодействуйте пожалуйста при решении задачи на защиту лабораторной работы
Суть проблемы в том что с паскалем я не особо дружу. Хожу делаю, но практически каждый раз не...

Задачи по массивам: Удалить строку с заданным номером D
7. Удалить строку с заданным номером D.

Задачи по массивам: Поменять местами столбцы с номерами p и q
11. Поменять местами столбцы с номерами p и q.

Посодействуйте в доработке
procedure TForm1.Button1Click(Sender: TObject); var a:array of integer; i,j,obr:integer; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru