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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.01.2011, 14:10   #1
malohacker
Новичок
Джуниор
 
Регистрация: 05.01.2011
Сообщений: 1
По умолчанию Паскаль программа работает через раз

Здравствуйте уважаемые форумчане.
Есть условие задачи
Дана матрица. Найти наименьший элемент в каждой строке матрицы. Номера столбцов этих наименьших элементов записать в дополнительный столбец.

Прога работатет через раз например из 5 стобцов может в одном ошибиться

помогите разобраться пожалуйста)))

вот код

Код:
program matriza;
uses crt;
var f,d:array [1..50] of string;
   a:array [1..50,1..50]of real;
   i,n,k,m, x, y:integer;
   sum,kol,min,nom: real;
begin
clrscr;
writeln('kolich strok matr');
readln(m);
writeln('kolich stolbsov matr');
readln(N);
for i:=1 to m do
for k:=1 to n do
  begin
  writeln('vvedite elementi ',i,' strok ',k,' stolbsov');
  readln(a[i,k]);
  end;
clrscr;
writeln('ishodnaya matr');
for i:=1 to m do
begin
for k:=1 to n do
write(a[i,k]:8:2);
writeln;
writeln
end;
for i:=1 to m do
begin
begin
x:=i;
y:=1;
min:=a[x,y];
end;
for k:=1 to n do
begin
if min>a[i,k] then
y:=k;
end;
a[i,n+1]:=y;
end;
writeln('rezultat');
for i:=1 to m do
begin
for k:=1 to n+1 do
write(a[i,k]:8:2);
writeln;
end;
end.
________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 05.01.2011 в 17:00.
malohacker вне форума Ответить с цитированием
Старый 05.01.2011, 14:25   #2
Niro
Форумчанин
 
Аватар для Niro
 
Регистрация: 23.09.2010
Сообщений: 682
По умолчанию

Оформите код специальным тегом code - решетка
Дабы код был читаем поставьте в нужных местах отступы
Насколько я понял, нужно найти только номера столбцов - т.е. нужен одномерный массив, По делу:
Кажется проблема в этой строке
Цитата:
if min>a[i,k] then
y:=k;
Вам нужно запоминать не только индекс первого найденно min элемента, но и сам элемент, иначе при дальнейшем поиске получим неправильный ответ
Пока все оформите код как надо, посмотрим еще
P.S. элементы лучше вводить рандомно

Хорошо - код оформили
замените
Цитата:
for i:=1 to m do
begin
begin
x:=i;
y:=1;
min:=a[x,y];
end;
for k:=1 to n do
begin
if min>a[i,k] then
y:=k;
a[i,n+1]:=y;
end;
на
Код:
for i:=1 to m do
begin
     y:=1;
     min:=a[i,y];
    for k:=1 to n do
   begin
      if min>a[i,k] then begin
                            min:=a[i,k];
                            y:=k;
                         end;
   newmassiv[i]:=y;
end;
Не забыв объявить newmassiv
P.S. Код не проверял
Проще всего признать свою ошибку.
Гораздо труднее еЁ осознать и исправить.

Последний раз редактировалось Niro; 05.01.2011 в 14:50.
Niro вне форума Ответить с цитированием
Старый 05.01.2011, 15:27   #3
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Код:
program matriza;
uses crt;

Почему ты используешь real?
Зачем такая куча переменных?
var f,d:array [1..50] of string;
   a:array [1..50,1..50]of real;
   i,n,k,m, x, y:integer;
   sum,kol,min,nom: real;
begin
clrscr;
writeln('kolich strok matr');
readln(m);
writeln('kolich stolbsov matr');
readln(N);
for i:=1 to m do
for k:=1 to n do
  begin
  writeln('vvedite elementi ',i,' strok ',k,' stolbsov');
  readln(a[i,k]);
  end;
clrscr;
writeln('ishodnaya matr');
for i:=1 to m do
begin
for k:=1 to n do
write(a[i,k]:8:2);
writeln;
writeln
end;
for i:=1 to m do
begin 
begin - зачем тут бегин? 
x:=i;
y:=1;
min:=a[x,y];
end;
for k:=1 to n do
begin
if min>a[i,k] then
y:=k;
end;
a[i,n+1]:=y;
end;
writeln('rezultat');
for i:=1 to m do
begin
for k:=1 to n+1 do
write(a[i,k]:8:2);
writeln;
end;
end.
Кароче сложно разобрать уже при таком форматировании и кучей лишних строк и переменных. Второй бегин компилятор отнесёт к какомунибудь другому циклу... Получится вложеный цикл. Этот цикл будет выполнять какойто лишний код и всё начнёт "работать через раз". Ктомуже компилятор неразрешит тебе использовать в этом вложеном цикле переменные внешнего цикла и тебе придётся задать новые переменые.. что ты и сделал:

Код:
x:=i;
y:=1;
min:=a[x,y];
Учись разбивать программу на блоки и грамотно выбирать типы переменных.

Код:
Var
Mas : Array [1..50, 1..50] Of Integer; // Массив
i, j : Integer; // Переменные циклов For
m, n : Integer; // m - количество столбцов, n - количество строк.
min : Integer; // минимальное значение в строке.

Begin
// Запрашиваем размерность массива
Write('kolich stolbsov matr: ');
Readln(m);
Write('kolich strok matr: ');
Readln(n);

// По уму надо бы проверить m и n.
// 1 < m < 49, 1 < n < 50. Предположим всё нормально....

// Заполняем случайными числами и выводим массив
Writeln;
Randomize;
For i := 1 To m Do
  Begin
    For j := 1 To n Do
      Begin
        Mas[i,j] := Random(9) + 1;
        Write(Mas[i,j], ' ');
      End;
    Writeln;
  End;

// Ищем минимальное значение и запоминаем, куда надо, его номер столбца
For i := 1 To n Do
  Begin
    min := Mas[i,1];
    Mas[i, m + 1] := 1;
    For j := 2 To m Do
      Begin
        If min > Mas[i,j] Then
          Begin
            Mas[i, m + 1] := j;
            min := Mas[i,j];
          End;
      End;
  End;

// Выводим эти номера
Writeln;
For i := 1 To n Do Writeln(Mas[i, m + 1]);

Readln;
End.
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему через раз вылазить ошибка I/O 103? Marsel737 Общие вопросы Delphi 9 23.10.2010 00:34
страница автоматически обновляется через 1 секунду только один раз Zeron JavaScript, Ajax 5 14.06.2010 08:18
(паскаль) Обработка кв. матрицы. Программа есть. Не корректно работает функция SUM.. aslanbek999 Помощь студентам 3 02.06.2009 19:51
WinRAR запускается через раз VitAngel Общие вопросы Delphi 0 16.02.2007 14:50