2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Turbo pascal.Нахождение среднего арифметического в массиве
Сообщение09.12.2012, 11:01 
Аватара пользователя
Моя задача:Дан массив С(N).Найти среднее арифметическое положительных элементов с четными индексами.
программу вроди бы понимаю как написать,но что-то не Выходит.пока еще новичок и не очень понимаю.КАК ПРАВИЛЬНО?Укажите на ошибки или помогите исправить что-бы заработала правильно. :facepalm:

Код:
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.


спасибо

 
 
 
 Re: Turbo pascal.Нахождение среднего арифметического в массиве
Сообщение09.12.2012, 16:34 
Чтобы ввести массив, вам надо ввести его элементы по очереди в цикле, а не так как сейчас.

Переменная i должна быть только порядкового типа (например, Integer), т. к. ей индексируется массив b, а ещё она счётчик цикла for — вещественные типы в этих местах использовать нельзя.

-- Вс дек 09, 2012 19:34:32 --

И не забывайте о правильных отступах.

 
 
 
 Re: Turbo pascal.Нахождение среднего арифметического в массиве
Сообщение17.12.2012, 16:14 
uses crt;
var C:array[1..100] of real;
i,k,n:real;//во-первых, как уже было сказано, переменные, служащие счетчиками в циклах должны
//быть целочисленного типа, в вашем случае byte или integer
S:real;
begin
clrscr;
write('Vvedite kol-vo elementov:');readln(n);v//во-вторых, зачем вам вводить количество элементов?
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.

 
 
 
 Re: Turbo pascal.Нахождение среднего арифметического в массиве
Сообщение17.12.2012, 16:26 
Аватара пользователя
Количество элементов нужно для того чтобы иметь возможность оперировать массивами (векторами) длинной от 1 до 100. Не будете же вы каждый раз вводить именно 100 элементов. :)

 
 
 
 Re: Turbo pascal.Нахождение среднего арифметического в массиве
Сообщение17.12.2012, 16:31 
вот рабочий код. может пригодится.
код: [ скачать ] [ спрятать ]
Используется синтаксис Delphi
uses crt;
const n = 100;
var C:array[1..n] of real;
    s:real;
    i,k:byte;
begin
clrscr;
for i := 1 to n do
begin
     writeln('vvedite znachenie:', i : 4);
     readln(c[i]);
end;
k:=0;
s:=0;
i := 0;
repeat
begin
     i+=2;
     if c[i] = 0
     then
     begin
          s+= c[i];
          inc(k);
     end;
end;
until i <= n;
s := s/k;
writeln('sr. arifmet. ravno', s : 5);
readkey;
end.  


-- 17.12.2012, 17:33 --

Chifu в сообщении #659733 писал(а):
Количество элементов нужно для того чтобы иметь возможность оперировать массивами (векторами) длинной от 1 до 100. Не будете же вы каждый раз вводить именно 100 элементов. :)


в таком случае для более разумного расходования памяти лучше использовать динамические массивы.
если конечно вы пользуетесь этим лишь для отладки, тогда другой разговор.

удачи!

 
 
 [ Сообщений: 5 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group