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

Тема в разделе "Pascal and Delphi", создана пользователем deniska92, 23 янв 2011.

Статус темы:
Закрыта.
  1. deniska92

    deniska92 Гость

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

    Код (Delphi):
    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;
     

    Вложения:

    • 1.PAS
      Размер файла:
      996 байт
      Просмотров:
      14
  2. Dock1100

    Dock1100 :-]

    Регистрация:
    9 ноя 2009
    Сообщения:
    678
    Симпатии:
    0
    Код (Text):
         
    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;
     
  3. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    хм, имхо, в основной программе должно быть так:
    Код (Delphi):
     rt(a);//заполнение массива а СВ
    Proverka(a,m);// подсчет кол-ва встречаемости кж из чисел
    r(a);//вывод массива а
    for i:=1 to 21 do // вывод кол-ва
    writeln(i-6,m[i]);

    readln;
    и в Proverka лучше
    Код (Delphi):
    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])
     
  4. deniska92

    deniska92 Гость

    пробовал запуCкать ваши варианты в Turbo Pascal 7...ВСЁ РАВНО ERROR 10 :( ПОМОГИТЕ ПЛИЗ,СРОЧНО НАДО(((((
     
  5. Dock1100

    Dock1100 :-]

    Регистрация:
    9 ноя 2009
    Сообщения:
    678
    Симпатии:
    0
    Код (Delphi):
    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 должн идти с точкой}
     
  6. deniska92

    deniska92 Гость

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

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

    nayke Well-Known Member

    Регистрация:
    4 авг 2010
    Сообщения:
    310
    Симпатии:
    0
    Может поможет
    Error 10
     
  8. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    nayke да вроде ж получилось у человека? Dock1100 довольно подробно описал.

    насчет переполнения - да, похоже там random возвращает тип Word, имхо, можно попробовать воспользоваться приведением типов:
    a:=Integer(random(21))-5;
     
  9. Dock1100

    Dock1100 :-]

    Регистрация:
    9 ноя 2009
    Сообщения:
    678
    Симпатии:
    0
    ICQ: 580470442
     
Загрузка...
Похожие Темы - Используя подпрограммы решить
  1. Lia
    Ответов:
    15
    Просмотров:
    1.082
  2. passwd
    Ответов:
    0
    Просмотров:
    1.126
  3. NatNiM
    Ответов:
    2
    Просмотров:
    1.758
  4. fedotxxl
    Ответов:
    5
    Просмотров:
    3.419
  5. NEZNAYKA2013
    Ответов:
    0
    Просмотров:
    1.111
Статус темы:
Закрыта.

Поделиться этой страницей