IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> надо найти ошибку в задаче из 3 подпрограмм(2 не выполняются при запуске), вот условие и мой код
maklir
сообщение 3.12.2007 19:28
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 16
Пол: Мужской
Реальное имя: Михаил

Репутация: -  0  +


условие:дана вещественная матрица, наити столбец, в котором сумма элементов больше заданного числа, если столбец находится в правой части матрицы, то упорядочить столбец по убыванию, иначе-узнать, есть ли в нем хотябы 1 отрицательный элемент.

код:
        program podprog;
        type  x=array[1..30,1..30]of real;
        var mass:x;j,i,n,k,row,col:byte;

        procedure sum(mass:x;k,row,col:byte);
        var summax:real;summ:real;
        procedure upor(mass:x;k:byte);
        var p:real;
        begin
          for i:=1 to row do
             begin
             for j:=1 to row-i do
                 begin
                 if mass[j,k]<mass[j+1,k] then
                 p:=mass[j,k];
                 mass[j,k]:=mass[j+1,k];
                 mass[j+1,k]:=p;
                  end;
             end;
        end;
        function poisk(mass:x;k:byte):boolean;
        var i,j,row,col:byte;p:boolean;
        begin
            begin
             for i:=1 to row do
               for j:=1 to col do
               begin
                  if mass[i,j]<0 then
                  begin
                  p:=true;
                  i:=row;
                  j:=col;
                  end;
               end;
               poisk:=p
             end;
        end;
        begin
           write('vvedite A');
           readln(summax);
           k:=0 ;
           for j:=1 to col do
           begin
           for i:=1 to row do
           begin
           summ:=summ+mass[i,j]
           end;
           begin
           if summax < summ then
           begin
           k:=j;
          j:=col;
          i:=row ;
          end;
          end;
          summ:=0
          end;
          write(summax,'   stolbec',k);
          readln;
           begin
            if k>col/2 then
               begin
                 upor(mass,k);
                 end;
               end;
               begin
            if k<col/2 then
               begin
                 poisk(mass,k);
                 end;
               end;

            end;
            begin
         write('vvedite kol-vo strok row=');
         readln(row);
         write('vvedite kol-vo stolbcov col=');
         readln(col) ;
              for i:=1 to row do
                    for j:=1 to col do
                    begin
                    write('vvedite element(',i,';',j,')');
                    readln(mass[i,j]);
                    end;
                    for i:=1 to row do
                    begin writeln;

                    for j:=1 to col do write(mass[i,j]:8:0);
                    writeln;
                    end;
                     readln;
                    writeln;

                    begin
                    sum(mass,k,row,col);
                    end;


            end.

заранее признателен
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 7)
Client
сообщение 3.12.2007 20:48
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


а ты где-нибудь к процедурам обращаешься? если да, то покажи где
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 3.12.2007 20:56
Сообщение #3


Гость






Обращается, обращается... См. Sum, в частности...

Автору: Внимательно смотрим сюда:
        function poisk(mass:x;k:byte):boolean;
        var i,j,row,col:byte;p:boolean;
        begin
            begin
             for i:=1 to row do
               for j:=1 to col do
               begin
                  if mass[i,j]<0 then
                  begin
                  p:=true;
                  i:=row;
                  j:=col;
                  end;
               end;
               poisk:=p
             end;
        end;

Ничего нехорошего не замечаешь? Меняешь переменную цикла (касается как i так и j, и не только здесь, еще и ниже по тексту)? Получай нестабильную работу программы.

Уууу... Как все запущено. У тебя еще и переменные цикла - глобальные? Еще один шаг к пропасти...

Сообщение отредактировано: volvo - 3.12.2007 20:58
 К началу страницы 
+ Ответить 
Client
сообщение 3.12.2007 21:06
Сообщение #4


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


Цитата
Обращается, обращается... См. Sum, в частности...

Да, ты прав (не до конца сделал трассировку)

Сообщение отредактировано: Client - 3.12.2007 21:16
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
maklir
сообщение 3.12.2007 21:07
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 16
Пол: Мужской
Реальное имя: Михаил

Репутация: -  0  +


так, стоп, объясни на премитивном клеточном уровне, я с языко только неделю общаюсь



Добавлено через 2 мин.
по поводу обращений, остальные два внутри sum, вроде по структуре так положено
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 3.12.2007 21:12
Сообщение #6


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


суть в том, что ты в цикле for меняешь переменную цикла ... Это грубейшая ошибка, а некоторые компиляторы этого вовсе не допускают.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 3.12.2007 21:17
Сообщение #7


Гость






Цитата
к Sum то он обращается, а вот к остальным то нет
А ты саму Sum внимательно смотрел? Как ты хочешь обращаться к "остальным", если они вложенные? Только из Sum... Показать, или сам найдешь?
 К началу страницы 
+ Ответить 
maklir
сообщение 3.12.2007 21:20
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 16
Пол: Мужской
Реальное имя: Михаил

Репутация: -  0  +


ааа, стоп, не говорите такими сложными словами, что такое троссировка, и кде конкретно(в какой строке ) я меняю переменную?

Добавлено через 2 мин.
все вроди сообразил, сейчас буду пробовать

Добавлено через 5 мин.
так, стоп, конкретно в указаном месте, смена переменных-неудачная попытка выйти из цикла до его завершения(значит надо через while было делать) но в других местах проги я этого не делаю..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 26.07.2025 4:41
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"