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

2 задачи, обе на двумерный массив

Дана матрица размером N на M,вывести количество строк матрицы,в которых число положительных элементов больше числа отрицательных элементов.

Дана квадратная матрицапорядка N вывести сторону матрицы,в которой элемент стоящий на главной диагонале максимален.

spektr
а как перенести пробу решения задачи в паскале от туда сюда((((((((( ypriamii.gif
мисс_граффити
1) сохраняешь файлик в формате с расширением pas (например, 1.pas)
2) щелкаешь по нему правой кнопкой -> открыть с помощью и выбираешь блокнот (или ворд)
3) копируешь, как обычный текст.
spektr
задача 2

Program stroka;
VAR
A:ARRAY [1..10,1..10] of integer;
i,j : integer;
BEGIN
WriteLn ('введите размерность массива  ');
ReadLn (n);
FOR i:=1 to n do
FOR j:=1 to n do
ReadLn (A[i,j]);
Begin



и вот на этом меня стопорит,я знаю что главная диагональ это i=j.
но как найти наибольшее и как вывести строку с наибольшим,ПОДСКАЖИТЕ.
Ozzя
Цитата
как найти наибольшее и как вывести строку с наибольшим,

max:=a[1,1];
k:=0;
for i:=2 to n do
if a[i,i]>max then
begin
max:=a[i,i];
k:=i;
end;
spektr
объясните пожалуйста.
Цитата
max:=a[1,1];

Цитата
max:=a[i,i];
k:=i;

что это значит и зачем мы это делаем.понимаю что это не очень умный вопрос,но если я не приложу усилий по сдаче задачь то мне придеться сдавать экзамен, а там я точно умру,от стреса. shok.gif
мисс_граффити
1. изначально предполагаем, что первый элемент и есть максимум. если это предположение неверное, то...
2. как только нам попадется элемент, больше него, запомним новый максимум и его индекс:
max:=a[i,i];
k:=i;


а что такое сторона матрицы?
spektr
это описка строка матрицы
мисс_граффити
а... ну тогда никаких проблем.
номер строки мы запомнили (k).
теперь просто надо вывести k-тую строку, то есть элементы
a[k,1], a[k,2]...a[k,n]
spektr
и как же это сделать,вы зря со мной разговариваете как с человеком который хоть что-то понимает,все по нулям.но я очень стараюсь.
я поняла твою мысль Юлия но как это воплотить в программе.
мисс_граффити
spektr, ну смотри:
номер строки остается неизменным (k), а номер столбца изменяется:1,2,3,4...n. значит, надо сделать, чтобы каждый раз вместо номер столбца подставлялось число, на 1 больше предыдущего, правильно?
начинается последовательность с 1, заканчивается n (n-это некоторая константа, которую мы знаем).
Очень удобно воспользоваться циклом for:
for i:=1 to n do
{вывод элемента a[k,i]}


знаешь, как делается вывод?
spektr
если чесно то нет,а вы не смотрели первую задачу меня там ломает на том же моменте,т.е после заполнения матрицы.
мисс_граффити
 writeln(a[k,i]);
spektr
Program stroka;
VAR
A:ARRAY [1..10,1..10] of integer;
i,j,n,max,k : integer;
BEGIN
WriteLn ('введите размерность массива  ');
ReadLn (n);
FOR i:=1 to n do
FOR j:=1 to n do
ReadLn (A[i,j]);
Begin
max:=a[1,1];
k:=0;
For i:=2 to n do
If a[i,i] > max
Then
begin
max:=a[i,i];
k:=1;
end;
For i:=1 to n do
WriteLn (a[k,i]);
END;
readLn
end.




где ошибка?(чувствую себя идиоткой)
volvo
        max:=a[i,i];
k:=i; { <--- Вместо единицы }


Кстати, почему в самом начале K := 0? Надо с 1 начинать... Иначе вдруг первый же элемент главной диагонали - максимальный, что будет?
spektr
Program stroka;
VAR
A:ARRAY [1..10,1..10] of integer;
i,j,n,max,k : integer;
BEGIN
WriteLn ('ўўҐ¤ЁвҐ а §¬Ґа­®бвм ¬ ббЁў  ');
ReadLn (n);
FOR i:=1 to n do
FOR j:=1 to n do
WriteLn ('§ Ї®«­ЁвҐ ¬ ббЁў');
ReadLn (A[i,j]);
Begin
max:=a[1,1];
k:=1;
For i:=2 to n do
If a[i,i] > max
Then
begin
max:=a[i,i];
k:=i;
else
end
For i:=1 to n do
WriteLn (a[k,i]);
END;
Readln
end.

ВСеравно не получается ypriamii.gif
volvo
Что не получается? Ты сначала программу как положено напиши, чтобы каждый End был под ЕГО же Begin-ом, и лишний Else убери из программы, тогда может и получится..
spektr
Program stroka;
VAR
A:ARRAY [1..10,1..10] of integer;
i,j,n,max,k : integer;
BEGIN
WriteLn ('ўўҐ¤ЁвҐ а §¬Ґа­®бвм ¬ ббЁў  ');
ReadLn (n);
FOR i:=1 to n do
FOR j:=1 to n do
WriteLn ('§ Ї®«­ЁвҐ ¬ ббЁў');
ReadLn (A[i,j]);
Begin
max:=a[1,1];
k:=1;
For i:=2 to n do
If a[i,i] > max
Then
begin
max:=a[i,i];
k:=i;
end;
For i:=1 to n do
WriteLn (a[k,i]);
end;
Readln
end.

кампилятор пропускает,но задача не считает
мисс_граффити
а ничего, что массив не заполняется вообще?
строка
 ReadLn (A[i,j]);

должна быть внутри цикла, правда?
spektr
а понятно,бегин энд еще один нужен!!!


АААААААААААААААААААА.ребят спасибо большое,Работает,какие вы умнички,простите что я вас своим тупизмом заколебала. !mol1.gif
с меня шоколадка

а как вам репу повысить подскажите(еще один тупизьмь)
мисс_граффити
пока что сама никак не можешь (у тебя сообщений мало).
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.