Помощь - Поиск - Пользователи - Календарь
Полная версия: Сырой массив
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
spektr
у меня задача почти сделана только возникают вопросы.

Задача:

Дана матрица размером 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.как сделать так чтобы ноль не считался ни за положительное ни за отрицательное а просто опускался.
2.как сделать так чтобы в блокноте буквы кирилицы не становились таробарщиной
3.здесь скорей всего много ошибок помогите пожалуйста найти,в каком смысле много иногда я согласна с ответом программы а иногда нет,не могу найти закономерность.


буду спасибо за любые найденые ошибки,и не сложные объяснения. smile.gif

мисс_граффити
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.
spektr
Большое спасибо,ну ведь теперь уже лучше чем в первый раз???
Lapp
Цитата(spektr @ 5.12.2006 21:32) *

2.как сделать так чтобы в блокноте буквы кирилицы не становились таробарщиной

Ноутпад - глючная программа..
Рекомендую тебе использовать Far. Скачать можно с их сайта, http://rarlab.com/
Он имеет даже некоторые специальные средства для русского и полезен с этой точки зрения.
Из его редактора ты сможешь копировать тексты в форум.

Если ты не знакома с этой программой, можешь поспрашивать в разделе OС и ПО.
мисс_граффити
Цитата(spektr @ 6.12.2006 12:13) *

Большое спасибо,ну ведь теперь уже лучше чем в первый раз???

а первый раз - это где? smile.gif
с чем сравнивать-то?
klem4
Зачем лишние переменные ?)

If pol > (M - pol)  then ...


мисс_граффити
Цитата(klem4 @ 6.12.2006 20:52) *

Зачем лишние переменные ?)

If pol > (M - pol)  then ...


а нули?
klem4
Ну так - то да ... хотя если считать ноль положительным smile.gif С другой стороны можно и не считать ... )) Ноль сложное число ...
мисс_граффити
Цитата(spektr @ 5.12.2006 20:32) *

1.как сделать так чтобы ноль не считался ни за положительное ни за отрицательное а просто опускался.

smile.gif
следуем пожеланиям автора темы...


Да мой косяк, через строчку прочитал "дано". Виноват, исправлюсь. klem4
spektr
а он придрался сказал что нужно ввести каких-то 2 вектора чтобы в каждой строке оди считал положительные другой отрицательные а уже потом что бы все это сравнивалось,если честно я не очень поняла,что на до сделать не поможите?
spektr
задача на двумерный массив сравнивать с этим)))))))))))
Lapp
Мисс_Граффити, твой недогляд.. Обнуление счетчиков положительных элементов стояло вне цикла по строкам. Думаю, это и есть причина того, почему препод попросил вывести столбцы положительных и отрицательных элементов - тогда ошибка будет более очевидна. Респект преподу - не лыком шит smile.gif.
Привожу исправленный вариант программы (с восстановленной верхним комментарием - орфография автра сохранена smile.gif)
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.

Spektr, разберись, в чем была ошибка, и покажи этот вариант препу. Может, он на этот раз не станет настаивать на выводе векторов. Если продолжит - приходи еще, это плевое в общем-то дело.. smile.gif
spektr
мож не надо,
у меня информатика = истерика, mega_chok.gif
формула еще со школы осталась.мож сразу и так как это делается???
Michael_Rybak
Скачай себе WinMerge и будет тебе удобно сравнивать.
spektr
Цитата
Скачай себе WinMerge и будет тебе удобно сравнивать.

что это ???
Michael_Rybak
Вот скриншоты.

Даешь ему 2 файлика, он красиво показывает, что поменялось.
Lapp
Цитата(spektr @ 9.12.2006 14:10) *

мож не надо,
у меня информатика = истерика, mega_chok.gif
формула еще со школы осталась.мож сразу и так как это делается???

в таком случае я точно пас.. Извиняюсь за флуд.
Гость
uses crt;
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.
После матрицы - 2 вектор-столбца, первый - количество отрицательных элементов сторки, второй - положительных... Чтобы не плодить лишние переменные все хранится в том же массиве - А (там просто добавлено 2 столбца: 101-ый - для подсчета количества отрицательных элементов, 102-ой для положительных)...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.