Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Одномерные массивы, нахождение среднего арифметического (http://www.tehnari.ru/f41/t81870/)

Sandra 2000 09.12.2012 14:48

Одномерные массивы, нахождение среднего арифметического
 
Turbo Pascal
Дан массив С(N). Найти среднее арифметическое положительных элементов с чётными индексами.

Задача простая,но пишу программу и постоянно ошибки выдает.Уже не знаю что делать!

Вот

uses crt;
var C:array[1..100] of real;
i,k,n:real;
S:real;
begin
clrscr;
write('Vvedite kol-vo elementov:');readln(n);
write('vvedite znachenie:');
readln(c[i]);
k:=0; s:=0;
for i:=1 to n do
begin
if (i) mod 2=0 and (c[i]>0) then begin
s:=s+c[i];inc(k);
end;
writeln('Srednee arifmetichescoe= ',s/k);
end;

readkey;
end.

Vladimir_S 09.12.2012 15:48

Цитата:

Сообщение от Sandra 2000 (Сообщение 831071)
write('Vvedite kol-vo elementov:');
readln(n);
write('vvedite znachenie:');
readln(c[i]);

А цикл ввода Пушкин организовывать будет? :D

Sandra 2000 09.12.2012 16:30

Вот другой вариант
 
uses crt;
var c:array[1..100]of real;
k:byte;
n,i:real;
s:real;
Begin
clrscr;
write('Vvedite kol-vo elementov: ');readln(n);
for i:=1 to n do
BEGIN
writeln('Vvedite znachenie: ');readln(c[i]);
end;
s:=0; k:=0;
for i:=1 to n do
begin
if i mod 2=0 and (c[i]>0) then
s:=s+c[i];
k:=k+1;
write(c[i]);
end;
writeln;
writeln('Srednee arifmetichescoe: ',s/k);
readln;
End.

Эта сначала запустилась,но среднее арифметическое не правильно вычисляет да и массив выводится не так как надо
потом я что-то поменяла и ошибка вышла что-то с типами связано ...???

Vladimir_S 09.12.2012 17:09

Цитата:

Сообщение от Sandra 2000 (Сообщение 831129)
потом я что-то поменяла и ошибка вышла что-то с типами связано ...???

Еще как связано! Ну кто же, скажите на милость, задает переменную цикла и количество членов массива в формате "real"?!! Абсолютно не годится! Есть и еще ошибки. Например, если в операторе If стоит не одно, а несколько условий, свзанных отношениями and и or, то эти условия ОБЯЗАТЕЛЬНО должны быть взяты в круглые скобки. Есть и еще помарки, в общем, вот исправленный вариант. Попробуйте разобраться:
Код:

uses crt;
var
 c:array[1..100] of real;
 k,i,n:byte;
 s:real;
Begin
 clrscr;
 write('Vvedite kol-vo elementov: ');
 readln(n);
 for i:=1 to n do
  begin
  write('Vvedite znachenie: ');
  readln(c[i]);
  end;
 s:=0;
 k:=0;
 for i:=1 to n do
  if (i mod 2=0) and (c[i]>0) then
  begin
    s:=s+c[i];
    k:=k+1;
  end;
 writeln;
 writeln('Srednee arifmetichescoe: ',s/k:0:5);
 readkey;
End.


Sandra 2000 09.12.2012 18:03

СПАСИБО
 
а можно еще вывести заданный массив после ввода элементов... извините я просто не хочу опять ошибок наделать

Vladimir_S 09.12.2012 18:18

Цитата:

Сообщение от Sandra 2000 (Сообщение 831183)
а можно еще вывести заданный массив после ввода элементов... извините я просто не хочу опять ошибок наделать

Легко:
Код:

uses crt;
var
 c:array[1..100]of real;
 k,i,n:byte;
 s:real;
Begin
 clrscr;
 write('Vvedite kol-vo elementov: ');
 readln(n);
 for i:=1 to n do
  begin
  write('Vvedite znachenie: ');
  readln(c[i]);
  end;
for i:=1 to n do write(c[i]:8:3);
 Writeln;

 s:=0;
 k:=0;
 for i:=1 to n do
  if (i mod 2=0) and (c[i]>0) then
  begin
    s:=s+c[i];
    k:=k+1;
  end;
 writeln;
 writeln('Srednee arifmetichescoe: ',s/k:0:5);
 readkey;
End.


PaskalABC.NET 15.05.2013 18:59

А можно как ни будь этот же код, только сделать так, что бы кол-во чисел которые ввел, можно было через запятую писать, или через пробел

Vladimir_S 16.05.2013 10:01

Цитата:

Сообщение от PaskalABC.NET (Сообщение 908031)
А можно как ни будь этот же код, только сделать так, что бы кол-во чисел которые ввел, можно было через запятую писать, или через пробел

Не понял. Что значит "количество чисел через запятую"? Или Вам надо, чтобы можно было весь массив набить на экране а потом одним нажатием "Enter" его ввести? Можно. Но никаких запятых - только пробелы!!!
Сразу отмечу недостаток такого метода: Вы сами должны контролировать совпадение количества набранных чисел с введенной длиной массива.
Код:

uses crt;
var
 c:array[1..100]of real;
 k,i,n:byte;
 s:real;
Begin
 clrscr;
 write('Vvedite kol-vo elementov: ');
 readln(n);
 writeln('Vvedite massiv:');
 for i:=1 to n-1 do read(c[i]);
 readln(c[n]);
 Writeln;
 s:=0;
 k:=0;
 for i:=1 to n do
  if (i mod 2=0) and (c[i]>0) then
  begin
    s:=s+c[i];
    k:=k+1;
  end;
 writeln;
 writeln('Srednee arifmetichescoe: ',s/k:0:5);
 readkey;
End.


PaskalABC.NET 16.05.2013 11:21

Спасибо огромное! Прям то что нужно!


Часовой пояс GMT +4, время: 02:38.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.