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

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

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

> функции и процедуры..., помогите найти ошибку.
Svetka
сообщение 24.03.2005 12:47
Сообщение #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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 15)
Stream
сообщение 24.03.2005 13:17
Сообщение #2


Новичок
*

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

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


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

Здесь вывод не той матрицы.
2. У тебя происходит банальное переполнение: при использовании чисел в матрице меньших либо равных 10 можешь представить результат перемножения. Выход: использовать вместо Integer -> Longint + уменьшить числа в матрице или включить в нее больше нулей.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Svetka
сообщение 24.03.2005 13:23
Сообщение #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 
 К началу страницы 
+ Ответить 
FreeMan
сообщение 24.03.2005 13:32
Сообщение #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 
 К началу страницы 
+ Ответить 
volvo
сообщение 24.03.2005 13:35
Сообщение #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 соответственно)
 К началу страницы 
+ Ответить 
Svetka
сообщение 24.03.2005 13:41
Сообщение #6


Пионер
**

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

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


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

Сообщение отредактировано: Svetka - 24.03.2005 13:45
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Svetka
сообщение 24.03.2005 14:55
Сообщение #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 
 К началу страницы 
+ Ответить 
volvo
сообщение 24.03.2005 15:01
Сообщение #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. Давайте хоть как-то выделять смещением блоки программы (Ваши программы ОЧЕНЬ трудно читать).
 К началу страницы 
+ Ответить 
FreeMan
сообщение 24.03.2005 15:02
Сообщение #9


-
****

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

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


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


volvo обогнал


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


Пионер
**

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

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


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

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


Гость






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


Пионер
**

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

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


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

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


-
****

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

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


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


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


Пионер
**

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

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


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

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


Новичок
*

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

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


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

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


Пионер
**

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

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


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

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

 



- Текстовая версия 20.07.2025 7:26
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"