Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.04.2010, 17:39   #1
Defender42
Пользователь
 
Регистрация: 27.12.2008
Сообщений: 89
По умолчанию объясните(паскаль)

Дан массив,найти среднее арифметическое положительных и отрицательных чисел(ввод с клавиатуры). Вот код:

Код:
Program Prim;
Var A:array[1..100] of integer;
    i:byte;
    n,s1,s2,k1,k2:integer;
    r1,r2:real;
Begin
   s1:=0;
   s2:=0;
   k1:=0;
   k2:=0;
   r1:=0;
   r2:=0;
   writeln('Vvedite n');
   readln(n);
   for i:= 1 to n do
   readln(A[i]);
   for i:= 1 to n do
   begin
   writeln('a[',i,']=');
   end;
   for i:=1 to n do
   if A[i]>=0 then
Begin
   s1:=s1+A[i];
   k1:=k1+1;
   r1:=s1/k1;
end;
   if A[i]<0 then
Begin
   s2:=s2+A[i];
   k2:=k2+1;
   r2:=s2/k2;
end;
   writeln('r1=',r1,'r2=',r2);
   readln;
end.
скажите что не так написано.
Дали задачу условие писать не буду, самому охото решить но есть загвоздка надо заполнить массив в котором храниться информация о росте человека,я так понял что массив надо заполнять примерно от 160 до 200 рандомом, а вот это писать не понимаю(, объясните пожалуйста.
Defender42 вне форума Ответить с цитированием
Старый 08.04.2010, 17:44   #2
Serebro
FORTRAN programmer
Форумчанин
 
Регистрация: 08.12.2009
Сообщений: 153
По умолчанию

Цитата:
Сообщение от Defender42 Посмотреть сообщение
Дан массив,найти среднее арифметическое положительных и отрицательных чисел(ввод с клавиатуры). Вот код:

Код:
Program Prim;
Var A:array[1..100] of integer;
    i:byte;
    n,s1,s2,k1,k2:integer;
    r1,r2:real;
Begin
   s1:=0;
   s2:=0;
   k1:=0;
   k2:=0;
   r1:=0;
   r2:=0;
   writeln('Vvedite n');
   readln(n);
   for i:= 1 to n do
   readln(A[i]);
   for i:= 1 to n do
   begin
   writeln('a[',i,']=');
   end;
   for i:=1 to n do
BEGIN
   if A[i]>=0 then
Begin
   s1:=s1+A[i];
   k1:=k1+1;
   r1:=s1/k1;
end;
   if A[i]<0 then
Begin
   s2:=s2+A[i];
   k2:=k2+1;
   r2:=s2/k2;
end;
END;
   writeln('r1=',r1,'r2=',r2);
   readln;
end.
скажите что не так написано.
Дали задачу условие писать не буду, самому охото решить но есть загвоздка надо заполнить массив в котором храниться информация о росте человека,я так понял что массив надо заполнять примерно от 160 до 200 рандомом, а вот это писать не понимаю(, объясните пожалуйста.
Не хватает begin ... end.
Serebro вне форума Ответить с цитированием
Старый 08.04.2010, 17:47   #3
Google2010
Форумчанин
 
Регистрация: 16.02.2010
Сообщений: 316
По умолчанию

Цитата:
массив надо заполнять примерно от 160 до 200 рандомом
Код:
rost:= random(40)+161;
Google2010 вне форума Ответить с цитированием
Старый 08.04.2010, 17:54   #4
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

А не проще вот это
Код:
   for i:=1 to n do
BEGIN
   if A[i]>=0 then
Begin
   s1:=s1+A[i];
   k1:=k1+1;
   r1:=s1/k1;
end;
   if A[i]<0 then
Begin
   s2:=s2+A[i];
   k2:=k2+1;
   r2:=s2/k2;
end;
END;
записать так
Код:
for i:=1 to n do
  if A[i]>=0 
    then
      begin
        s1:=s1+A[i];
        k1:=k1+1;
        r1:=s1/k1
      end
    else
      begin
        s2:=s2+A[i];
        k2:=k2+1;
        r2:=s2/k2
      end;
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Старый 08.04.2010, 18:03   #5
Gray_Jagger
Пользователь
 
Аватар для Gray_Jagger
 
Регистрация: 04.04.2010
Сообщений: 29
Радость

может быть я и не прав, но

s1:=s1+A[i];
k1:=k1+1;
r1:=s1/k1; - это! должно быть вне цикла. т. е.

Код:
Program Prim;
Var A:array[1..100] of integer;
    i:byte;
    n,s1,s2,k1,k2:integer;
    r1,r2:real;
Begin
   s1:=0;
   s2:=0;
   k1:=0;
   k2:=0;
   r1:=0;
   r2:=0;
   writeln('Vvedite n');
   readln(n);
   for i:= 1 to n do
   readln(A[i]);
   for i:= 1 to n do
   begin
   writeln('a[',i,']=');
   end;
   for i:=1 to n do
   if A[i]>=0 then
Begin
   s1:=s1+A[i];
   k1:=k1+1;
   r1:=s1/k1;
end;
   if A[i]<0 then
Begin
   s2:=s2+A[i];
   k2:=k2+1;
   r2:=s2/k2;
end;
   writeln('r1=',r1,'r2=',r2);
   readln;
end.
переделываем в
Код:
Program Prim;
Var A:array[1..100] of integer;
    i:byte;
    n,s1,s2,k1,k2:integer;
    r1,r2:real;
Begin
   s1:=0;
   s2:=0;
   k1:=0;
   k2:=0;
   r1:=0;
   r2:=0;
   writeln('Vvedite n');
   readln(n);
   for i:= 1 to n do
   begin
   readln(A[i]);
   for i:= 1 to n do
   begin
   writeln('a[',i,']=');
   end;
   for i:=1 to n do
   if A[i]>=0 then
Begin
   s1:=s1+A[i];
   k1:=k1+1;
  
end;
   if A[i]<0 then
Begin
   s2:=s2+A[i];
   k2:=k2+1;
end;
 r1:=s1/k1;
   r2:=s2/k2;
end;
   writeln('r1=',r1,'r2=',r2);
   readln;
end.
Пока будущее туманно, оно в твоих руках.
Gray_Jagger вне форума Ответить с цитированием
Старый 08.04.2010, 18:08   #6
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Ты совершенно прав! Это и есть средние арифметические...
Плохо, когда переменные имеют безликие имена...

Но меня убивает эта конструкция:
Код:
for i:=1 to n do
   if A[i]>=0 then
Begin
   s1:=s1+A[i];
   k1:=k1+1;
  
end;
   if A[i]<0 then
Begin
   s2:=s2+A[i];
   k2:=k2+1;
end;
Делать две взаимоисключающие друг друга проверки, ха-ха-ха
Перемешивай дело с бездельем и не сойдешь с ума...

Последний раз редактировалось Grag; 08.04.2010 в 18:11.
Grag вне форума Ответить с цитированием
Старый 08.04.2010, 18:33   #7
Defender42
Пользователь
 
Регистрация: 27.12.2008
Сообщений: 89
По умолчанию

[/code]
переделываем в
Код:
Program Prim;
Var A:array[1..100] of integer;
    i:byte;
    n,s1,s2,k1,k2:integer;
    r1,r2:real;
Begin
   s1:=0;
   s2:=0;
   k1:=0;
   k2:=0;
   r1:=0;
   r2:=0;
   writeln('Vvedite n');
   readln(n);
   for i:= 1 to n do
   begin
   readln(A[i]);
   for i:= 1 to n do
   begin
   writeln('a[',i,']=');
   end;
   for i:=1 to n do
   if A[i]>=0 then
Begin
   s1:=s1+A[i];
   k1:=k1+1;
  
end;
   if A[i]<0 then
Begin
   s2:=s2+A[i];
   k2:=k2+1;
end;
 r1:=s1/k1;
   r2:=s2/k2;
end;
   writeln('r1=',r1,'r2=',r2);
   readln;
end.
[/QUOTE]
Вылетает ошибка(error 200) после того как ввел первый элемент массива

Последний раз редактировалось Defender42; 08.04.2010 в 18:36.
Defender42 вне форума Ответить с цитированием
Старый 08.04.2010, 18:56   #8
Serebro
FORTRAN programmer
Форумчанин
 
Регистрация: 08.12.2009
Сообщений: 153
По умолчанию

Цитата:
Сообщение от Defender42 Посмотреть сообщение
переделываем в
Код:
Program Prim;
Var A:array[1..100] of integer;
    i:byte;
    n,s1,s2,k1,k2:integer;
    r1,r2:real;
Begin
   s1:=0;
   s2:=0;
   k1:=0;
   k2:=0;
   r1:=0;
   r2:=0;
   writeln('Vvedite n');
   readln(n);
   for i:= 1 to n do
   begin
   readln(A[i]);
   for i:= 1 to n do
   begin
   writeln('a[',i,']=');
   end;
   for i:=1 to n do
   if A[i]>=0 then
Begin
   s1:=s1+A[i];
   k1:=k1+1;
  
end;
   if A[i]<0 then
Begin
   s2:=s2+A[i];
   k2:=k2+1;
end;
 r1:=s1/k1;
   r2:=s2/k2;
end;
   writeln('r1=',r1,'r2=',r2);
   readln;
end.
Вылетает ошибка(error 200) после того как ввел первый элемент массива
Неправильно расставлены begin и end, например, первый выделенный begin без соответсвующего end.
Serebro вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объясните Alexsssandr Помощь студентам 2 17.02.2010 20:50
C++ (объясните!) slim>>> Помощь студентам 7 27.01.2010 19:39
Объясните!!! Dawystrik Общие вопросы Delphi 1 20.03.2009 12:07
паскаль. массивы. объясните код. [silver beast] Помощь студентам 3 21.01.2009 08:42
Паскаль. рекурсия. числа. объясните, как работает код [silver beast] Помощь студентам 2 21.01.2009 05:00