Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2008, 15:01   #1
adelaida
 
Регистрация: 24.11.2008
Сообщений: 4
По умолчанию Pascal. Массивы. Help.

Всем привет!

Задача такова:
Дан целый массив из 4 строк и 4 столбцов. Упорядочить массив по возрастанию произведения элементов столбцов.

Вообщем я прогу написал, но она некорректно работает - все элементы нового массива, в который я записал произведения элементов столбцов, равны 0, какие бы исходные данные я ни вводил. Пожалуйста, помогите, где у меня тут ошибки...?

___________________________________ ______________________________

Program mass;
var A:array[1..4,1..4] of real;
P:array[1..4] of real;
i,n,S,j:integer;
c:real;
begin
for i:=1 to 4 do
for j:=1 to 4 do begin
write('A[i,j]=');
readln(A[i,j]);
end;
for j:=1 to 4 do begin
P[j]:=1;
for i:=1 to 4 do
P[j]:=P[j]*A[i,j];
end;
repeat
S:=0;
for j:=1 to 4 do
if P[j]>P[j+1] then begin
c:=P[j];
P[j]:=P[j+1];
P[j+1]:=c;
S:=1;
end;
until S>0;
for i:=1 to 4 do
write(P[j]:6:1,' ');
readln;
end.

___________________________________ ______________________________


Спасибо!
Изображения
Тип файла: jpg Безымянный.jpg (7.6 Кб, 161 просмотров)
adelaida вне форума Ответить с цитированием
Старый 24.11.2008, 15:10   #2
А. Долматов
Форумчанин
 
Аватар для А. Долматов
 
Регистрация: 15.02.2007
Сообщений: 183
По умолчанию

Цитата:
for j:=1 to 4 do begin
P[j]:=1;
for i:=1 to 4 do
P[j]:=P[j]*A[i,j];
end;
тебе необходимо в массиве P - формировать массив произведений столбцов. получается, что P[i]=A[i,j]*A[i,j+1]
главное чтобы счетчик столбцов не ушел за 4
Знать все невозможно, в силу того, что жить бы стало неинтересно.

Последний раз редактировалось А. Долматов; 24.11.2008 в 15:28.
А. Долматов вне форума Ответить с цитированием
Старый 24.11.2008, 15:14   #3
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

Цитата:
Сообщение от adelaida Посмотреть сообщение
Всем привет!


Код:
for i:=1 to 4 do
write(P[j]:6:1,' ');

___________________________________ ______________________________


Спасибо!
Присмотрись к индексам:один i другой j. Надо определиться...
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума Ответить с цитированием
Старый 24.11.2008, 15:20   #4
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

Цитата:
Дан целый массив из 4 строк и 4 столбцов. Упорядочить массив по возрастанию произведения элементов столбцов.
Если как Вы решаете то можно вот так

Код:
Program mass;
uses crt;
var A:array[1..4,1..4] of real;
    P:array[1..4] of real;
    i,n,S,j:integer;
    c:real;
begin
clrscr;
for i:=1 to 4 do
  for j:=1 to 4 do begin
 write('A[',i,',',j,']=');
   readln(A[i,j]);
    end;
for j:=1 to 4 do begin
  P[j]:=1;
for i:=1 to 4 do
 P[j]:=P[j]*A[i,j];
end;
 for i:=2 to 4 do
    for j:=4 downto i do
      if p[j-1]>p[j] then
        begin
          c:=p[j-1];
          p[j-1]:=p[j];
          p[j]:=c;
        end;
for i:=1 to 4 do
write(P[i]:6:1,' ');
readln;
end.
Но мне кажется, что нужно еще и в матрице столбцы переставить согласно ротации произведения элементов
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума Ответить с цитированием
Старый 24.11.2008, 15:21   #5
adelaida
 
Регистрация: 24.11.2008
Сообщений: 4
По умолчанию

alexc_fcsm, спасибо! ошибку понял! насчёт перестановки столбцов..всмысле, столбец с меньшим произведением элементов поставить в начало и дальше по возрастанию?

Последний раз редактировалось adelaida; 24.11.2008 в 15:28.
adelaida вне форума Ответить с цитированием
Старый 24.11.2008, 15:28   #6
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

Цитата:
Дан целый массив из 4 строк и 4 столбцов. Упорядочить массив по возрастанию произведения элементов столбцов.
Здесь про другой массив ничего не говорится. Вот я и подумал, что нужно еще и отсортировать исходную матрицу(т.е. массив P как бы вспомогательный для решения задачи). Но повторяю ЭТО Я ТАК ПОНЯЛ. Задача Ваша и вы сами вправе определить. Это только мои мысли.
P.S. Извиняюсь если ввел Вас в заблуждение
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума Ответить с цитированием
Старый 24.11.2008, 15:30   #7
adelaida
 
Регистрация: 24.11.2008
Сообщений: 4
По умолчанию

да, наверное вы правы... а не могли бы сказать, как переставлять столбцы местами?)
adelaida вне форума Ответить с цитированием
Старый 24.11.2008, 15:31   #8
А. Долматов
Форумчанин
 
Аватар для А. Долматов
 
Регистрация: 15.02.2007
Сообщений: 183
По умолчанию

так ведь в задании сказано
Цитата:
Упорядочить массив по возрастанию произведения элементов столбцов
, а массив у тебя является матрицей.
P.S. не сразу правильно прочел код, извиняй
Знать все невозможно, в силу того, что жить бы стало неинтересно.
А. Долматов вне форума Ответить с цитированием
Старый 24.11.2008, 15:36   #9
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

Сомтрите идея такая массив P делаете записью
type TM=record
mult:real;
ind:integer;
end;

P:array[1..4] of TM;


в mult(P[i].mult) пишите произведение, а в ind(P[i].ind) номер столбца. После этого также упорядочиваете массив по произведению, а столбцы выписыаете согласно ind в массиве P

Массив P(mult,ind)
13,2
156,4
1231,1
3421,3

в матрице превым делаете второй, вторым четвертый ....
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума Ответить с цитированием
Старый 24.11.2008, 15:42   #10
А. Долматов
Форумчанин
 
Аватар для А. Долматов
 
Регистрация: 15.02.2007
Сообщений: 183
По умолчанию

Цитата:
а не могли бы сказать, как переставлять столбцы местами?)
заведи переменную, например, zam. и дальше цикл
zam:=a[1,j];
a[1,j]:=a[1,j+2];
a[1,j+2]:=zam;
где j+2 это для примера просто как поменять 1 и 3 столбцы местами при j=1
Знать все невозможно, в силу того, что жить бы стало неинтересно.
А. Долматов вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal/Массивы ромка) Паскаль, Turbo Pascal, PascalABC.NET 6 14.06.2008 18:29
Pascal задачи на массивы SweetOpium Помощь студентам 9 08.05.2008 20:40
Массивы в Pascal Alex XXX Помощь студентам 4 21.04.2008 02:16
Pascal. Массивы Danilyuk Помощь студентам 1 22.01.2008 19:56