Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.03.2013, 22:05   #1
Live1SMR
Пользователь
 
Регистрация: 26.03.2013
Сообщений: 13
Сообщение Paskal,вывод матрицы

Задача:
Дана целочисленная квадратная матрица. Вывести ее на экран и определить произведение элементов в тех строках, которые не содержат отрицательных элементов.

Вот что я написал, но программа не работает, не считает произведение...
Цитата:
Var a:array[1..10, 1..10] of longint;
i,j,n,m,h,proizv:integer;
Begin
clrscr;
writeln('vvedite n');
readln(n);
Begin
writeln('vvedite znacheniay matrizi');
for i:=1 to n do
Begin
for j:=1 to n do
readln(a[i,j]);
end;
for i:=1 to n do
Begin
for j:=1 to n do
write(a[i,j]:10,' ');
writeln;
end; end;
proizv:=0;
Begin
for i:=1 to n do
Begin
for j:=1 to n do
if a[i,j]>=0 then
proizv:=proizv*a[i,j] else break;
writeln('v stroke nomer',i,' proizvedenie ravno ',proizv);
end;
end;
readln;
end.
Помогите пожалуйста, исправьте программу, очень нужна ваша помощь.)
Live1SMR вне форума Ответить с цитированием
Старый 26.03.2013, 22:10   #2
alexander13
Форумчанин
 
Аватар для alexander13
 
Регистрация: 07.02.2013
Сообщений: 267
По умолчанию

Как минимум, должно быть
Код:
proizv:=1;
вместо
Код:
proizv:=0;
Весь код не смотрел, он нечитабелен.
Μολὼν λαβέ
alexander13 вне форума Ответить с цитированием
Старый 26.03.2013, 22:17   #3
RomiKon
Форумчанин
 
Регистрация: 11.04.2010
Сообщений: 143
По умолчанию

Код:
Var a:array[1..10, 1..10] of longint;
  i,j,n,m,h,proizv:integer;
Begin
  clrscr;
  writeln('vvedite n');
  readln(n);
  writeln('vvedite znacheniay matrizi');
  for i:=1 to n do
  Begin
    for j:=1 to n do
    readln(a[i,j]);
  end;
  for i:=1 to n do
  Begin
    for j:=1 to n do
    write(a[i,j]:10,' ');
    writeln;
  end; 
  for i:=1 to n do
  Begin
    proizv:=1;
    for j:=1 to n do
      if a[i,j]>=0 then
        proizv:=proizv*a[i,j] 
     else 
       break;
    writeln('v stroke nomer',i,' proizvedenie ravno ',proizv);
  end;
  readln;
end.
RomiKon вне форума Ответить с цитированием
Старый 26.03.2013, 22:20   #4
alexander13
Форумчанин
 
Аватар для alexander13
 
Регистрация: 07.02.2013
Сообщений: 267
По умолчанию

Хм.. Ну, в таком случае, она будет работать неправильно. Будет выводить произведение положительных элементов для каждой строки.

upd.
Ну, точнее, произведение положительных элементов в строке до встречи первого отрицательного эл-та. Как-то так.
Μολὼν λαβέ

Последний раз редактировалось alexander13; 26.03.2013 в 22:22.
alexander13 вне форума Ответить с цитированием
Старый 26.03.2013, 22:37   #5
Live1SMR
Пользователь
 
Регистрация: 26.03.2013
Сообщений: 13
По умолчанию

При замене на
Код:
proizv:=1;
программа выдаёт после ввода значений, ошибку проверки диапазона.
Live1SMR вне форума Ответить с цитированием
Старый 26.03.2013, 22:45   #6
alexander13
Форумчанин
 
Аватар для alexander13
 
Регистрация: 07.02.2013
Сообщений: 267
По умолчанию

Цитата:
Сообщение от Live1SMR Посмотреть сообщение
При замене на
Код:
proizv:=1;
программа выдаёт после ввода значений, ошибку проверки диапазона.
Во-первых, сомнительно.
Во-вторых, если немножко подумать головой, то можно понять, что если инициализировать что-то нулем и потом на это что-то умножать, то ничего кроме нуля не получится в результате.
В-третьих, еще раз говорю, даже при изменении значения на 1 программа не будет работать правильно.

upd.
Можно как-нибудь так сделать
Код:
const 
	n = 3;

var 
	a : array[1..n, 1..n] of longint;
	i, j, m, h, proizv : integer;
BEGIN
	writeln('vvedite znacheniay matrizi');
	for i := 1 to n do
		for j := 1 to n do
			readln(a[i,j]);
 
	for i := 1 to n do begin
		for j := 1 to n do
			write(a[i,j]:10,' ');
		writeln;
	end; 
  
	for i := 1 to n do begin
		proizv := 1;
		for j := 1 to n do
			if a[i,j] >= 0 then
				proizv := proizv*a[i,j] 
			else begin
				proizv := 0;
				break;
			end;
		if proizv <> 0 then
			writeln('v stroke nomer ',i,' proizvedenie ravno ',proizv);
	end;
	readln;
END.
Μολὼν λαβέ

Последний раз редактировалось alexander13; 26.03.2013 в 22:50.
alexander13 вне форума Ответить с цитированием
Старый 26.03.2013, 23:21   #7
Live1SMR
Пользователь
 
Регистрация: 26.03.2013
Сообщений: 13
По умолчанию

программа производит заполнение матрицы, но никаких вычислений не производит.
Live1SMR вне форума Ответить с цитированием
Старый 26.03.2013, 23:22   #8
alexander13
Форумчанин
 
Аватар для alexander13
 
Регистрация: 07.02.2013
Сообщений: 267
По умолчанию

А где обоснование слов? Скриншот, текст ошибки, пример входных данных, на которых она не считает? У меня моя программа работает.
Μολὼν λαβέ

Последний раз редактировалось alexander13; 26.03.2013 в 23:25.
alexander13 вне форума Ответить с цитированием
Старый 26.03.2013, 23:57   #9
Live1SMR
Пользователь
 
Регистрация: 26.03.2013
Сообщений: 13
По умолчанию

А нет, мой косяк, не дописал.
Программа и вправду работает...
Спасибо.
Live1SMR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
paskal abc,turbo paskal andrei57 Паскаль, Turbo Pascal, PascalABC.NET 3 08.09.2011 05:33
вывод матрицы promt Общие вопросы C/C++ 1 01.05.2011 20:59
Free Paskal и Turbo Paskal Polly~Sunbeam Паскаль, Turbo Pascal, PascalABC.NET 7 18.04.2011 16:00
Вывод матрицы chandler Microsoft Office Excel 2 04.07.2010 15:58
Вывод матрицы skiffter Помощь студентам 2 04.12.2009 19:57