вот задание: Заданы 3 матрицы действительных чисел 5х6, 10х8, 8х7. Определить сумму элементов в тех столбцах, которые не содержат отрицательных элементов. Сравнить результаты обработки матриц.
вот мой листинг:
Program pr7; uses crt; type matr=array [1..10,1..10] of integer; ooo = object; n,m:byte; a:matr; procedure Vvod(n,m:byte); procedure vivod; function sum_m: integer; end;
var x,y,z:ooo;
procedure ooo.vvod; var i,j:byte; begin for i:=1 to n do for J;=1 to m do a[i,j]:=random(20); end;
procedure ooo.vivod; var i,j:byte; begin for i:=1 to n do begin writeln; for j:=1 to m do write(a[i,j]:6:0); end; end;
function ooo.sum_m: integer; var i, j: byte; Summ, ResSumm: integer; IsNegative: boolean; begin ResSumm := 0;
for j := 1 to n do begin IsNegative := false; Summ := 0; i := 0; while (i < m) or not IsNegative do begin if a[i,j] > 0 then Summ := Summ + a[i,j] else IsNegative := true; inc(i); end; if not IsNegative then ResSumm := ResSumm + Summ; end; sum_m := ResSumm; end;
Точку с запятой убери после object Он разве тебе не пишет, что хочет увидеть идентификаторы, а не ";" ? (дальше не смотрела)
NiMfetKa
9.01.2009 5:51
теперь 4 ошибка после
Код
procedure ooo.vvod; var i,j:byte;
Lapp
9.01.2009 6:04
Цитата(NiMfetKa @ 9.01.2009 1:51)
теперь 4 ошибка после
Код
procedure ooo.vvod; var i,j:byte;
После объявления процедуры? Параметры вставь, как выше.
Ты лучше приводи сам текст ошибки тоже..
Айра
9.01.2009 6:06
а вызываешь как ooo.vvod(5,6)? на так нужно ж указать программе, что у процедуры есть параметры.. В выложенном здесь коде у тебя это было..
Из замеченного далее: есть проблема с выводом (тут тоже нужно указывать значения m и n) и с sum_m.. Указывать второй раз ее тип не нужно, опять же значение m и n откуда программе брать? и обрати внимание на i и j, точнее на то, какие они принимают значения и существуют ли элементы массивов с такими номерами..
Добавлено через 1 мин. Да.. сумма должна считаться отдельно по каждому столбцу, неимеющему отрицательных, или на всю матрицу?
NiMfetKa
9.01.2009 6:11
ему не нра вар почему-то...
Айра
9.01.2009 6:14
И еще: 0. в цикле while нужно не or а and и (j <= m) 1. у тебя значения элементов массива всегда будут >=0..
Цитата
ему не нра вар почему-то...
покажи описательную часть.. ты что-то изменила относительно варианта из 1го поста?
Добавлено через 4 мин.
Цитата
сумма должна считаться отдельно по каждому столбцу, неимеющему отрицательных, или на всю матрицу?
к чему я это.. если второй вариант, то отдельные вызовы функции sum_m можно убрать и оставить только writeln'ы..
Lapp
9.01.2009 6:24
Цитата(NiMfetKa @ 9.01.2009 2:11)
ему не нра вар почему-то...
Слушай, NiMfetKa, а какой у тя компилятор, если не секрет?
Айра
9.01.2009 6:26
Ошибка 4 - duplicate identifier (сорри, не то скопировала, теперь исправила) - дублированны\двойной идентификатор.. [telepathy_on] проверь, не описала ли ты переменные i и j где-нибудь вне процедуры.. [telepathy_off]
volvo
9.01.2009 6:27
Цитата
теперь 4 ошибка после
procedure ooo.vvod; var i,j:byte;
Прав компилятор на все 100%... У тебя уже есть N, как член объекта, ты еще и как параметр метода хочешь использовать N? Нельзя. Давай другое имя либо параметру, либо члену класса...
Lapp
9.01.2009 6:32
Цитата(volvo @ 9.01.2009 2:27)
Прав компилятор на все 100%...
Ну, на 99%.. Turbo этого не требует.
volvo
9.01.2009 6:33
Турбо как раз и требует, чтобы не было повторений в именах параметров... А вот FPC компилирует нормально...
Lapp
9.01.2009 6:33
NiMfetKa, скажи, чем компилируешь!
Добавлено через 5 мин.
Цитата(volvo @ 9.01.2009 2:33)
Турбо как раз и требует, чтобы не было повторений в именах параметров... А вот FPC компилирует нормально...
Хм, да, забавно... А FP в моде TP - вроде, кушает..
NiMfetKa
9.01.2009 6:39
и что должно долучиться ?
Lapp
9.01.2009 6:40
Хотя в моде FP - не пропускает. Причем, раньше
NiMfetKa
9.01.2009 6:40
TURBO PASCAL 7.1
Lapp
9.01.2009 6:41
Цитата(NiMfetKa @ 9.01.2009 2:39)
и что должно долучиться ?
Хороший вопрос.. Думаю - прогресс!
Добавлено через 2 мин. Мне кажется, параметры у Vvod можно просто убрать...
Айра
9.01.2009 6:50
Тоже проверила, fpc все равно, tp7.0 ругается.. А я решила проблему изгнанием n и m из членов объекта и принятием в ряды параметров процедур\функций
В общем, у меня получились такие бредни (оставляю возможность не смотреть)))
Спойлер(Показать/Скрыть)
Program pr7; uses crt; type matr=array [1..10,1..10] of integer; ooo = object a:matr; procedure Vvod(n,m: byte); procedure vivod(n,m: byte); function sum_m(n,m: byte): integer; end;
var x,y,z:ooo;
procedure ooo.vvod; var i,j:byte; begin for i:=1 to n do for J:=1 to m do a[i,j]:=random(20); end;
procedure ooo.vivod; var i,j:byte; begin for i:=1 to n do begin writeln; for j:=1 to m do write(a[i,j]:6); end; writeln; end;
function ooo.sum_m; var i, j: byte; Summ, ResSumm: integer; IsNegative: boolean; begin ResSumm := 0;
for i := 1 to n do begin IsNegative := false; Summ := 0; j := 1; while (j <= m) and not IsNegative do begin if a[i,j] > 0 then Summ := Summ + a[i,j] else IsNegative := true; inc(j); end; if not IsNegative then ResSumm := ResSumm + Summ; end; sum_m := ResSumm; end;
а что с третим массивом? за основу брала твой вариант.. там было только три вывода.. да и спрашивала я тебя уже, что именно надо делать..
к тому же:
пост #1
Цитата
Определить сумму элементов в тех столбцах
теперь
Цитата
и надо искать сумму строк...
в такой ситуации моя телепатия бессильна..
NiMfetKa
9.01.2009 7:17
третий массивчик надо как-то вместить на экране, но как? и сумму все же столбцов
Айра
9.01.2009 7:21
по-моему никак) во всяком случае я выхода не знаю.. сейчас пересмотрела, у меня действительно сумма строк, сама переделаешь можешь на подсчет того, что тебе надо?
NiMfetKa
9.01.2009 7:24
спаси меня, Айра, умоляю
Айра
9.01.2009 7:28
Странно как-то.. написала такой большой код, а сейчас не можешь поменять местами i\j и n\m ? Ну ладно.. вот:
function ooo.sum_m; var i, j: byte; Summ, ResSumm: integer; IsNegative: boolean; begin ResSumm := 0;
for j := 1 to m do begin IsNegative := false; Summ := 0; i := 1; while (i <= n) and not IsNegative do begin if a[i,j] > 0 then Summ := Summ + a[i,j] else IsNegative := true; inc(i); end; if not IsNegative then ResSumm := ResSumm + Summ; end; sum_m := ResSumm; end;
Да.. random во вводе поправь, я единицу прибавляла для проверки, теперь не надо.. а то даже нулей в массиве не будет..
NiMfetKa
9.01.2009 7:28
в функции надо поменять i с j местами и дописать вывод суммы столбцов, да? но тогда в основной проге тоже надо переделывать...
Айра
9.01.2009 7:34
NiMfetKa, ну я же у тебя несколько раз спрашивала: "выводить сумму надо каждого столбца отдельно или всех столбцов матрицы?" (естественно, удовлетворяющих условию)
NiMfetKa
9.01.2009 7:41
четкого требования нет, но, наверное, удобнее для просмотра будет же сумма кождого столбца...
Айра
9.01.2009 7:49
тогда вот это: функция подсчета мутирует в процедуру и выводит суммы по мере вычисления.. (ну и еще кое-какие изменения есть)
Program pr7; uses crt; type matr=array [1..10,1..10] of integer; ooo = object m,n: byte; a:matr; procedure Vvod(size_n,size_m: byte); //исправила procedure vivod; procedure sum_m; end;
var x,y,z:ooo;
procedure ooo.vvod; var i,j:byte; begin n:=size_n; m:=size_m; for i:=1 to n do for J:=1 to m do a[i,j]:=random(20)-5; end;
procedure ooo.vivod; var i,j:byte; begin for i:=1 to n do begin writeln; for j:=1 to m do write(a[i,j]:6); end; writeln; end;
procedure ooo.sum_m; var i, j: byte; Summ: integer; IsNegative: boolean; begin
for j := 1 to m do begin IsNegative := false; Summ := 0; i := 1; while (i <= n) and not IsNegative do begin if a[i,j] > 0 then Summ := Summ + a[i,j] else IsNegative := true; inc(i); end; if not IsNegative then write(Summ:6); end; writeln; end;
почему в первой матрице только одна сумма, если с положительными элементами 2-ва столбца? да еще странная какая-то...
Lapp
9.01.2009 9:29
Айра, ты зачем поменяла местами m и n?
procedure Vvod(size_m,size_n: byte);
NiMfetKa, все (почти) верно, у тебя просто первые две строчки первой матрицы уползают за экран, и ты их не видишь.
Добавлено через 6 мин. Еще вместо
if a[i,j] > 0 then
нужно
if a[i,j] >= 0 then
NiMfetKa
9.01.2009 16:56
Хм, как переделать процедуру ooo.sum_m в функцию определения отрицательных элементов и процедуру определения суммы. Хелп ми
Айра
9.01.2009 17:12
Цитата
Айра, ты зачем поменяла местами m и n?
Ой.. случайно.. в алфавитном порядке записала.. (сейчас исправлю)
Цитата
Еще вместо
Вот с этим всегда проблемы, считать ли ноль положительным числом или нет)) наши преподы отвечали: "не считайте"
Lapp
9.01.2009 22:31
Цитата(Айра @ 9.01.2009 13:12)
Вот с этим всегда проблемы, считать ли ноль положительным числом или нет)) наши преподы отвечали: "не считайте"
Никаких проблем нет. Разумеется, ноль - не положительное число. Но только в условии ничего нет про положительные числа, цитирую:
Цитата(NiMfetKa @ 9.01.2009 0:59)
Определить сумму элементов в тех столбцах, которые не содержат отрицательных элементов.
Мне кажется, тут разночтений быть не может
Lapp
10.01.2009 5:51
Цитата(NiMfetKa @ 9.01.2009 12:56)
функцию определения отрицательных элементов
- что это значит? Выражайся так, чтоб тебя можно было понять. Может, в функцию определения наличия отрицательных элементов?
Айра
10.01.2009 6:19
to NiMfetKa, и можно вообще увидеть конкретные требования по заданию и программе? а то твои просьбы постоянно мутируют, и постоянно что-то переделывать желания не возникает...
NiMfetKa
10.01.2009 21:39
да, Lapp, в в функцию определения наличия отрицательных элементов и в процедуру определения суммы столбцов. Айра, все требования и их изменения зависят только от переменчевого настроения преподавателя.
там же функция должна передавать параметр j и быть логического типа, да? а процедуда должна определять суммы только в том случае, когда not IsNegative?
Айра
10.01.2009 22:16
Цитата
там же функция должна передавать параметр j и быть логического типа, да?
То есть? Может в функцию должен передаваться этот параметр (номер столбца) ? (в голову приходит процедура с вложенной в нее функцией.. )
NiMfetKa
10.01.2009 22:54
ХМ, нет, не вложенный... процедурка же должна знать сумму какого столбца ей определять...
Айра
10.01.2009 23:09
procedure sum_m; function IsNegative({передаешь номер текущего столбца}): boolean; begin {здесь идет проверка конкретного столбца наличие отрицательных элементов. если они есть, то функция принимает значение true, если нет - false } end; begin for j:=1 to m do if not IsNegative(j) then {считаешь и выводишь сумму} end; {это краткий набросок}
?
NiMfetKa
10.01.2009 23:25
а не вложенной можно сделать?
Айра
10.01.2009 23:31
И не вложенной можно. Принцип вызова остается тот же, просто описываешь ее вне процедуры по всем правилам..
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.