Используя подпрограммы,решить задачу

  • Автор темы deniska92
  • Дата начала
Статус
Закрыто для дальнейших ответов.
D

deniska92

Гость
#1
Помогите пожалуйста решить в Pascal:
Используя подпрограммы,решить задачу
const n=100
1.Получить массив разсерности N,заполненный числами из диапозона -5..15.
2.Посчитать колличество использований каждого из чисел.Распечатать исходный массив и массив колличеств.
В принципе я программу написал,используя 3 процедуры,но у меня выбивает ошибку 10 в самом конце....помогите.....

Код:
Program Pr;

const n=100;
type mas=array [1..N] of integer;
b=array [1..21] of integer;
var a:mas;

Procedure rt(var a:mas);
var i:integer;
begin
for i:=1 to N do
a[i]:=random(21)-6;
end;


Procedure r(a:mas);
var i:integer;
begin
for i:=1 to N do
write(a[i]:5);
end;


Procedure Proverka(a:mas;m:b);
var i:integer;
begin
for i:=1 to N do
begin
case a[i] of
-5:m[1]:=m[1]+1;
-4:m[2]:=m[2]+1;
-3:m[3]:=m[3]+1;
-2:m[4]:=m[4]+1;
-1:m[5]:=m[5]+1;
0:m[6]:=m[6]+1;
1:m[7]:=m[7]+1;
2:m[8]:=m[8]+1;
3:m[9]:=m[9]+1;
4:m[10]:=m[10]+1;
5:m[11]:=m[11]+1;
6:m[12]:=m[12]+1;
7:m[13]:=m[13]+1;
8:m[14]:=m[14]+1;
9:m[15]:=m[15]+1;
10:m[16]:=m[16]+1;
11:m[17]:=m[17]+1;
12:m[18]:=m[18]+1;
13:m[19]:=m[19]+1;
14:m[20]:=m[20]+1;
15:m[21]:=m[21]+1;
end;
end;

begin
Proverka(a,m);
for i:=1 to 21 do
writeln(i-5,m[i]);
rt(a);
r(a);
readln;
end;
 

Вложения

  • 996 байт Просмотры: 14
09.11.2009
665
1
23
Киев
#2
Код:
for i:=1 to 21 do
writeln(i-5,m[i]);
А почему i-5, а не просто i?
У вас же масив b=array [1..21] of integer; а не b=array [-5..16] of integer;
 

hosm

* so what *
18.05.2009
2 442
9
42
Kiev, Ukraine
#3
хм, имхо, в основной программе должно быть так:
Код:
 rt(a);//заполнение массива а СВ
Proverka(a,m);// подсчет кол-ва встречаемости кж из чисел
r(a);//вывод массива а
for i:=1 to 21 do // вывод кол-ва
writeln(i-6,m[i]);

readln;
и в Proverka лучше
Код:
for i:=1 to N do
case a[i] of
-5..15:m[a[i]+6]:=m[a[i]+6]+1;
end;// проще ваще inc(m[a[i]+6])
 
D

deniska92

Гость
#4
пробовал запуCкать ваши варианты в Turbo Pascal 7...ВСЁ РАВНО ERROR 10 :( ПОМОГИТЕ ПЛИЗ,СРОЧНО НАДО(((((
 
09.11.2009
665
1
23
Киев
#5
Код:
Program Pr;

const N=100;
type mas=array [1..N] of integer;
b=array [1..21] of integer;
var a:mas;
m:b; {тут}
i:integer; {тут}

Procedure rt(var a:mas);
var i:integer;
begin
for i:=1 to N do
begin
a[i]:=random(21);
a[i]:=a[i]-5; {так, потому что иначе у меня идет арифметическое переполнение}
end;
end;


Procedure r(a:mas);
var i:integer;
begin
for i:=1 to N do
write(a[i]:5);
end;


Procedure Proverka(a:mas;m:b);
var i:integer;
begin
for i:=1 to N do
begin
case a[i] of
-5:m[1]:=m[1]+1;
-4:m[2]:=m[2]+1;
-3:m[3]:=m[3]+1;
-2:m[4]:=m[4]+1;
-1:m[5]:=m[5]+1;
0:m[6]:=m[6]+1;
1:m[7]:=m[7]+1;
2:m[8]:=m[8]+1;
3:m[9]:=m[9]+1;
4:m[10]:=m[10]+1;
5:m[11]:=m[11]+1;
6:m[12]:=m[12]+1;
7:m[13]:=m[13]+1;
8:m[14]:=m[14]+1;
9:m[15]:=m[15]+1;
10:m[16]:=m[16]+1;
11:m[17]:=m[17]+1;
12:m[18]:=m[18]+1;
13:m[19]:=m[19]+1;
14:m[20]:=m[20]+1;
15:m[21]:=m[21]+1;
end; {после case надо ставить end}
end;
end;

begin
rt(a);
Proverka(a,m);
for i:=1 to 21 do
writeln(i-5,m[i]);
r(a);
readln;
end.{в конце end должн идти с точкой}
 
D

deniska92

Гость
#6
S.O.S.!!!!!!!!!!!!!!!!!!!!!!!!!ПОМОГИТЕ...ПРОГРАММА НЕ ИДЁТ ИЗ-ЗА ERROR 10..МОЖЕТ КТО ЗНАЕТ РЕШЕНИЕ ЭТОЙ ПРОБЛЕМЫ))

Добавлено: Dock1100,спасибо большое))))))))буду должен))))))))чем расплачиваться??))))
 

hosm

* so what *
18.05.2009
2 442
9
42
Kiev, Ukraine
#8
nayke да вроде ж получилось у человека? Dock1100 довольно подробно описал.
a:=random(21); a:=a-5; {так, потому что иначе у меня идет арифметическое переполнение}

насчет переполнения - да, похоже там random возвращает тип Word, имхо, можно попробовать воспользоваться приведением типов:
a:=Integer(random(21))-5;
 
Статус
Закрыто для дальнейших ответов.