Помощь - Поиск - Пользователи - Календарь
Полная версия: функции и процедуры...
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Svetka
1)задание такое:вывести марицы а(1..12) и с(10..7).найти и вывести на экран произведение ненулевых элементов матриц.....вот код
Исходный код
Program xxx;
uses crt;
type
matrica=array[1..14,1..12] of integer;
var
a,c:matrica;
p1,p2:integer;
procedure input(var d:matrica;n,k:integer);
var
i,j:integer;
begin
randomize;
for i:=1 to n do begin
for j:=1 to k do
d[i,j]:=random(10);
end;
End;
Procedure output(var d:matrica;n,k:integer);
var
i,j:integer;
begin
for i:=1 to n do begin
for j:=1 to k do
Write(d[i,j]:4);
Writeln('');
End;
end;
function p (d:matrica;n,k:integer):integer;
var
i,j,proiz:integer;
begin
proiz:=1;
for i:=1 to n do begin
for j:=1 to k do
if d[i,j]>0 then
proiz:=proiz*d[i,j];
p:=proiz;
End;
End;
begin
input(a,14,12);
input(c,10,7);
Writeln('matrica a');
output(a,14,12);
Writeln('matrica c');
output(a,10,7);
readkey;
p1:=p(a,14,12);
p2:=p(c,10,7);
Writeln('p=',p1);
Writeln('p=',p2);
Readln;
End.

помогите ошибку найти.он постоянно обнуляет произведение.
Stream
Все грамотно, только пара штук нехороших 1:
Код
Writeln('matrica c');
output(a,10,7);

Здесь вывод не той матрицы.
2. У тебя происходит банальное переполнение: при использовании чисел в матрице меньших либо равных 10 можешь представить результат перемножения. Выход: использовать вместо Integer -> Longint + уменьшить числа в матрице или включить в нее больше нулей.
Svetka
Цитата(Stream @ 24.03.05 14:17)
Все грамотно, только пара штук нехороших...

я исправила.....
matrica=array[1..14,1..12] of integer; заменила matrica=array[1..14,1..12] of longint;
random(2); там тока 0 и 1 тогда он считает.... как тока пишу random(3); опять произведение =0 sad.gif
FreeMan
longint - тип переменной, куда заносим результат умножения p1,p2, а не матрица. random(3) дайт числа в интервале 0..2, допустим там только 1/3 часть двоек. массив 14х12. число элементов массива 168. число двоек 168/3=56. их произведение - 2^56. integer - -2^15..2^15 делай выводы
volvo
Там действительно получаются ОЧЕНЬ большие произведения.
Порядка:
p= 1.59450346424613E+0089
p= 1.02752101061628E+0036
Единственный вариант (с теми же исходными данными) -
Код
function p (d:matrica;n,k:integer):extended;
var
 i,j: integer;
 proiz:extended;
begin
 proiz:=1;
 for i:=1 to n do begin
   for j:=1 to k do
     if d[i,j]>0 then proiz:=proiz*d[i,j];
 end;
 p:=proiz; { эта строка должна быть здесь !!! }
End;

чтобы это заработало - первой строкой программы поставьте {$N+} (ну и замените тип p1, p2 на extended соответственно)
Svetka
работает)))
тока вот random(3);
он считает произведение=5 хотя там много 2.......
Svetka
вот код:
Исходный код

Program xxx;
uses crt;
type
matrica=array[1..8,1..5] of integer;
var
a,k:matrica;
n1,n2:integer;
procedure input(var d:matrica;n,k:integer);
var
i,j:integer;
begin
randomize;
for i:=1 to n do begin
for j:=1 to k do
d[i,j]:=random(10);
end;
End;
Procedure output(var d:matrica;n,k:integer);
var
i,j:integer;
begin
for i:=1 to n do begin
for j:=1 to k do
Write(d[i,j]:4);
Writeln('');
End;
end;
function kolvo (d:matrica;n,k:integer):integer;
var
i,j,n3:integer;
begin
n3:=0;
for i:=1 to n do begin
for j:=1 to k do
if d[i,j]>0 then
n3:=n3+1;
{n3:=kolvo;}
End;
End;
begin
input(a,8,5);
input(k,5,7);
Writeln('matrica a');
output(a,8,5);
Writeln('matrica k');
output(a,5,7);
readkey;
n1:=kolvo(a,8,5);
n2:=kolvo(k,5,7);
Writeln('n1=',n1);
Writeln('n2=',n2);
Readln;
End.

End.

помогите найти ошибку...программа должна найти и вывести на экран кол-во положительных элементов матриц
а она неправильно выводит
volvo
Код
function kolvo (d:matrica;n,k:integer):integer;
var
 i,j,n3:integer;
begin
 n3:=0;
 for i:=1 to n do begin
   for j:=1 to k do
     if d[i,j]>0 then n3:=n3+1;
 end;
 kolvo := n3; { Не забывайте !!! }
end;

1. Функция не возвращает результат
2. Давайте хоть как-то выделять смещением блоки программы (Ваши программы ОЧЕНЬ трудно читать).
FreeMan
Я так понял ты тут пытаешься определить кол-во ненулевых элементов...
для этого тебе надо в конец функции kolvo добавить строку kolvo:=n3;


volvo обогнал
Svetka
спасибо)) у мя получилось)))
тока 1 задача с произведением никак не получается...
volvo
А ведь я написал, что можно сделать... smile.gif
Svetka
Цитата(volvo @ 24.03.05 16:13)
А ведь я написал, что можно сделать...  smile.gif

я это попробовала...но там вот random(3); например
он считает произведение p=1.567347778+e132 например.... а там там допустим половина 2 и половина нулей а произведение очень маленькой получается....
FreeMan
ещё один совет - не делай большую матрицу. сделай 3х3 или 1х1 smile.gif
Svetka
Цитата(FreeMan @ 24.03.05 16:19)
ещё один совет - не делай большую матрицу. сделай 3х3 или 1х1 smile.gif

я б сделала...но там задание именно а(12..14)и с(10..7) smile.gif unsure.gif
Stream
Цитата(Svetka @ 24.03.05 15:16)
я это попробовала...но там вот random(3); например
он считает произведение p=1.567347778+e132 например.... а там там допустим половина 2 и половина нулей а произведение очень маленькой получается....

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