Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ задача на двумерный массив

Автор: spektr 1.12.2006 18:56

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

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

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

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


Автор: spektr 1.12.2006 20:11

а как перенести пробу решения задачи в паскале от туда сюда((((((((( ypriamii.gif

Автор: мисс_граффити 1.12.2006 23:47

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

Автор: spektr 2.12.2006 13:54

задача 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я 2.12.2006 14:38

Цитата
как найти наибольшее и как вывести строку с наибольшим,

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 2.12.2006 15:13

объясните пожалуйста.

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

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

что это значит и зачем мы это делаем.понимаю что это не очень умный вопрос,но если я не приложу усилий по сдаче задачь то мне придеться сдавать экзамен, а там я точно умру,от стреса. shok.gif

Автор: мисс_граффити 2.12.2006 16:36

1. изначально предполагаем, что первый элемент и есть максимум. если это предположение неверное, то...
2. как только нам попадется элемент, больше него, запомним новый максимум и его индекс:

max:=a[i,i];
k:=i;


а что такое сторона матрицы?

Автор: spektr 2.12.2006 17:54

это описка строка матрицы

Автор: мисс_граффити 2.12.2006 18:20

а... ну тогда никаких проблем.
номер строки мы запомнили (k).
теперь просто надо вывести k-тую строку, то есть элементы
a[k,1], a[k,2]...a[k,n]

Автор: spektr 2.12.2006 18:36

и как же это сделать,вы зря со мной разговариваете как с человеком который хоть что-то понимает,все по нулям.но я очень стараюсь.
я поняла твою мысль Юлия но как это воплотить в программе.

Автор: мисс_граффити 2.12.2006 18:59

spektr, ну смотри:
номер строки остается неизменным (k), а номер столбца изменяется:1,2,3,4...n. значит, надо сделать, чтобы каждый раз вместо номер столбца подставлялось число, на 1 больше предыдущего, правильно?
начинается последовательность с 1, заканчивается n (n-это некоторая константа, которую мы знаем).
Очень удобно воспользоваться циклом for:

for i:=1 to n do
{вывод элемента a[k,i]}


знаешь, как делается вывод?

Автор: spektr 2.12.2006 22:02

если чесно то нет,а вы не смотрели первую задачу меня там ломает на том же моменте,т.е после заполнения матрицы.

Автор: мисс_граффити 2.12.2006 22:11

 writeln(a[k,i]);

Автор: spektr 3.12.2006 14:51

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 3.12.2006 15:19

        max:=a[i,i];
k:=i; { <--- Вместо единицы }


Кстати, почему в самом начале K := 0? Надо с 1 начинать... Иначе вдруг первый же элемент главной диагонали - максимальный, что будет?

Автор: spektr 3.12.2006 19:48

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 3.12.2006 19:50

Что не получается? Ты сначала программу как положено напиши, чтобы каждый End был под ЕГО же Begin-ом, и лишний Else убери из программы, тогда может и получится..

Автор: spektr 4.12.2006 21:13

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.

кампилятор пропускает,но задача не считает

Автор: мисс_граффити 4.12.2006 23:42

а ничего, что массив не заполняется вообще?
строка

 ReadLn (A[i,j]);

должна быть внутри цикла, правда?

Автор: spektr 4.12.2006 23:56

а понятно,бегин энд еще один нужен!!!


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

а как вам репу повысить подскажите(еще один тупизьмь)

Автор: мисс_граффити 5.12.2006 0:01

пока что сама никак не можешь (у тебя сообщений мало).