IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> функции и процедуры..., помогите найти ошибку.
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 51
Пол: Женский

Репутация: -  0  +


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.

помогите ошибку найти.он постоянно обнуляет произведение.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 10

Репутация: -  0  +


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

Здесь вывод не той матрицы.
2. У тебя происходит банальное переполнение: при использовании чисел в матрице меньших либо равных 10 можешь представить результат перемножения. Выход: использовать вместо Integer -> Longint + уменьшить числа в матрице или включить в нее больше нулей.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 51
Пол: Женский

Репутация: -  0  +


Цитата(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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


-
****

Группа: Пользователи
Сообщений: 480
Пол: Мужской

Репутация: -  4  +


longint - тип переменной, куда заносим результат умножения p1,p2, а не матрица. random(3) дайт числа в интервале 0..2, допустим там только 1/3 часть двоек. массив 14х12. число элементов массива 168. число двоек 168/3=56. их произведение - 2^56. integer - -2^15..2^15 делай выводы


--------------------
бб
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Там действительно получаются ОЧЕНЬ большие произведения.
Порядка:
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 соответственно)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Пионер
**

Группа: Пользователи
Сообщений: 51
Пол: Женский

Репутация: -  0  +


работает)))
тока вот random(3);
он считает произведение=5 хотя там много 2.......

Сообщение отредактировано: Svetka -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Пионер
**

Группа: Пользователи
Сообщений: 51
Пол: Женский

Репутация: -  0  +


вот код:
Исходный код

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.

помогите найти ошибку...программа должна найти и вывести на экран кол-во положительных элементов матриц
а она неправильно выводит
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Код
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. Давайте хоть как-то выделять смещением блоки программы (Ваши программы ОЧЕНЬ трудно читать).
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


-
****

Группа: Пользователи
Сообщений: 480
Пол: Мужской

Репутация: -  4  +


Я так понял ты тут пытаешься определить кол-во ненулевых элементов...
для этого тебе надо в конец функции kolvo добавить строку kolvo:=n3;


volvo обогнал


--------------------
бб
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Пионер
**

Группа: Пользователи
Сообщений: 51
Пол: Женский

Репутация: -  0  +


спасибо)) у мя получилось)))
тока 1 задача с произведением никак не получается...

Сообщение отредактировано: Svetka -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






А ведь я написал, что можно сделать... smile.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Пионер
**

Группа: Пользователи
Сообщений: 51
Пол: Женский

Репутация: -  0  +


Цитата(volvo @ 24.03.05 16:13)
А ведь я написал, что можно сделать...  smile.gif

я это попробовала...но там вот random(3); например
он считает произведение p=1.567347778+e132 например.... а там там допустим половина 2 и половина нулей а произведение очень маленькой получается....
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


-
****

Группа: Пользователи
Сообщений: 480
Пол: Мужской

Репутация: -  4  +


ещё один совет - не делай большую матрицу. сделай 3х3 или 1х1 smile.gif


--------------------
бб
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Пионер
**

Группа: Пользователи
Сообщений: 51
Пол: Женский

Репутация: -  0  +


Цитата(FreeMan @ 24.03.05 16:19)
ещё один совет - не делай большую матрицу. сделай 3х3 или 1х1 smile.gif

я б сделала...но там задание именно а(12..14)и с(10..7) smile.gif unsure.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Новичок
*

Группа: Пользователи
Сообщений: 10

Репутация: -  0  +


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

Ни фига себе маленькое....
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Пионер
**

Группа: Пользователи
Сообщений: 51
Пол: Женский

Репутация: -  0  +


я ничего не поняла))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 15.05.2024 6:05
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name