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

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

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

 
 Ответить  Открыть новую тему 
> надо найти ошибку в задаче из 3 подпрограмм(2 не выполняются при запуске), вот условие и мой код
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Профи
****

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

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


а ты где-нибудь к процедурам обращаешься? если да, то покажи где
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Профи
****

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

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


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

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

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


Новичок
*

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

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


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



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


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

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

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


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


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


Гость






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


Новичок
*

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

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


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

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

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

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

 





- Текстовая версия 19.01.2021 10:12
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name