у меня задача почти сделана только возникают вопросы.
Задача:
Дана матрица размером N на M,вывести количество строк в которых число положительных элементов больше числа отрицательных элементов.
РЕшение:
PROGRAM bolse;
{ўлў®¤ бва®ЄЁ ў Є®в®а®© Ї®«®¦ЁвҐ«мле н«Ґ¬Ґв®ўЎ®«миҐ зЁб« ®ваЁж ⥫мле н«Ґ¬Ґв®ў}
uses crt;
VAR
A: array [1..100,1..100] of integer;
i,j,n,m,otr,pol,sum : integer;
BEGIN
clrscr;
WriteLn ('Їа®Ја ¬¬ ўлў®¤ бва®ЄЁ ў Є®в®а®© Ї®«®¦ЁвҐ«мле н«Ґ¬Ґв®ўЎ®«миҐ зЁб« ®ваЁж ⥫мле н«Ґ¬Ґв®ў');
WriteLn ('введите размерность массива i,j');
ReadLn (n,m);
pol:=0;
otr:=0;
sum:=0;
FOR i:=1 to n DO
FOR j:=1 to m do
Begin
WriteLn ('заполните массив');
readLn (A[i,j]);
End;
FOR i:=1 to n DO
BEGIN
FOR j:=1 to m DO
BEGIN
IF A[i,j]>0
Then
pol:=pol+1
Else
otr:=otr+1;
end;
end;
For i:=1 to n do
BEGIN
If pol>otr
then
sum:=sum+1;
end;
WriteLn ('количество строк',sum);
ReadLn
End.
1 и 3 твои вопросы:
PROGRAM bolse;
{ўлў®¤ бва®ЄЁ ў Є®в®а®© Ї®«®¦ЁвҐ«мле н«Ґ¬Ґв®ўЎ®«миҐ зЁб« ®ваЁж ⥫мле н«Ґ¬Ґв®ў}
uses crt;
VAR
A: array [1..100,1..100] of integer;
i,j,n,m,otr,pol,sum : integer;
BEGIN
clrscr;
WriteLn ('programa - vyvod....');
WriteLn ('vvedite razmernost matricy i,j');
ReadLn (n,m);
pol:=0;
otr:=0;
sum:=0;
FOR i:=1 to n DO
FOR j:=1 to m do
Begin
WriteLn ('element ',i,' ',j,' raven');
readLn (A[i,j]);
End;
FOR i:=1 to n DO
BEGIN
FOR j:=1 to m DO
BEGIN
IF A[i,j]>0 Then
pol:=pol+1;
if A[i,j]<0 then {чтобы не считал 0, вместо полного условного оператора сделали 2 неполных}
otr:=otr+1;
end;
If pol>otr then {посмотри внимательно на границы цикла... ты анализировала только инфу по последней строке - если она подходила, то ты считала, что подходят все. если не подходила - то все отвергала}
sum:=sum+1;
end;
clrscr;
for i:=1 to n do
begin
for j:=1 to n do
write(A[i,j],' ');
writeln;
end;
WriteLn ('kolvo strok ',sum);
ReadLn
End.
Большое спасибо,ну ведь теперь уже лучше чем в первый раз???
Зачем лишние переменные ?)
If pol > (M - pol) then ...
If pol > (M - pol) then ...
Ну так - то да ... хотя если считать ноль положительным С другой стороны можно и не считать ... )) Ноль сложное число ...
а он придрался сказал что нужно ввести каких-то 2 вектора чтобы в каждой строке оди считал положительные другой отрицательные а уже потом что бы все это сравнивалось,если честно я не очень поняла,что на до сделать не поможите?
http://forum.pascal.net.ru/index.php?showtopic=14059 сравнивать с этим)))))))))))
Мисс_Граффити, твой недогляд.. Обнуление счетчиков положительных элементов стояло вне цикла по строкам. Думаю, это и есть причина того, почему препод попросил вывести столбцы положительных и отрицательных элементов - тогда ошибка будет более очевидна. Респект преподу - не лыком шит .
Привожу исправленный вариант программы (с восстановленной верхним комментарием - орфография автра сохранена )
PROGRAM bolse;
{вывод строки в которой положительны элеметовбольше числа отрицательых элеметов}
uses crt;
VAR
A: array [1..100,1..100] of integer;
i,j,n,m,otr,pol,sum : integer;
BEGIN
clrscr;
WriteLn ('programa - vyvod....');
WriteLn ('vvedite razmernost matricy i,j');
ReadLn (n,m);
FOR i:=1 to n DO
FOR j:=1 to m do
Begin
WriteLn ('element ',i,' ',j,' raven');
readLn (A[i,j]);
End;
sum:=0;
FOR i:=1 to n DO BEGIN
pol:=0; {обнуление pol и otr должно стоять внутри цикла по строкам}
otr:=0;
FOR j:=1 to m DO BEGIN
IF A[i,j]>0 Then
pol:=pol+1;
if A[i,j]<0 then {чтобы не считал 0, вместо полного условного оператора сделали 2 неполных}
otr:=otr+1;
end;
If pol>otr then
sum:=sum+1;
end;
clrscr;
for i:=1 to n do
begin
for j:=1 to n do
write(A[i,j],' ');
writeln;
end;
WriteLn ('kolvo strok ',sum);
ReadLn
End.
мож не надо,
у меня информатика = истерика,
формула еще со школы осталась.мож сразу и так как это делается???
Скачай себе http://prdownloads.sourceforge.net/winmerge/WinMerge-2.6.0-Setup.exe и будет тебе удобно сравнивать.
http://winmerge.org/2.6/screenshots.php скриншоты.
Даешь ему 2 файлика, он красиво показывает, что поменялось.
uses crt;После матрицы - 2 вектор-столбца, первый - количество отрицательных элементов сторки, второй - положительных... Чтобы не плодить лишние переменные все хранится в том же массиве - А (там просто добавлено 2 столбца: 101-ый - для подсчета количества отрицательных элементов, 102-ой для положительных)...
VAR
A: array[1 .. 100, 1 .. 102] of integer;
i, j, m, n, count: integer;
BEGIN
clrscr;
WriteLn ('programa - vyvod....');
WriteLn ('vvedite razmernost matricy i,j');
ReadLn (n,m);
count := 0;
for i := 1 to n do begin
A[i, 101] := 0; A[i, 102] := 0;
for j := 1 to m do begin
WriteLn ('element ',i,' ',j,' raven');
readLn (A[i,j]);
if a[i, j] < 0 then A[i, 101] := A[i, 101] + 1
else if a[i, j] > 0 then A[i, 102] := A[i, 102] + 1;
end;
if A[i, 101] < A[i, 102] then count := count + 1;
end;
clrscr;
for i := 1 to n do begin
for j := 1 to m do write(A[i,j]:4);
writeln('':5, a[i, 101]:4, a[i, 102]:4)
end;
WriteLn ('kolvo strok = ', count);
ReadLn
End.