Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Задача с одномерным массивом

Автор: Widess 19.03.2007 21:32

Условие:
вычисление среднего значения в одномерном массиве для всех элементов между первым и вторым нулем в массиве (или от первого нулевого значения до конца массива). Длина и значения элементов массива вводятся с клавиатуры. Печатать элементы массива по: 5 штук, формату :12.

Долго мучаюсь, переделываю по-разному, но правильно никак не считает. Помогите, пожалуйста, найти ошибки:


PROGRAM LAB;
VAR
i, l, j, A, b, c, d :integer;
N, Sr, Sum :real;
Number :array[1..50] of real;
Fout :text;
BEGIN
Sum:=0;
writeln('Skolko budet chisel?');
readln(A);
for i:=1 to A do
begin
writeln('Vvedite ocherednoe chislo');
readln(Number[i]);
end;
assign(Fout,'A:\LAB.TXT');
rewrite(Fout);
writeln(Fout,'Ishodniy massiv iz ',A,' elementov');
for i:=1 to A do
begin
write(Fout,Number[i]:12);
if i mod 5 = 0 then writeln(Fout);
end;
writeln(Fout);
for i:=1 to A do
begin
if Number[i] = 0 then c:=i;
begin
for k:=c to A do
begin
if Number[k]>0 then
Sum:=Sum+Number[k];
if Number[k]=0 then d:=k;
b:=d-c-1;
Sr:=Sum/b
end;
end;
end;
write(Fout,'Srednee znachenie ravno ',Sr,'');
close(Fout);
END.



И еще вопрос, не относящийся к этой задаче: как сделать так, чтобы в массиве с произвольными символами программа находила только символы кириллицы?
Заранее спасибо.

Автор: Человек_Без_Имени 19.03.2007 22:49


for i:=1 to A do
begin
if Number[i] = 0 then c:=i;
break;
end;

for k:=c to A do
begin
if Number[k]<>0 then
Sum:=Sum+Number[k];
if Number[k]=0 then
begin
d:=k;
break;
end ;
end;
b:=d-c-1;
Sr:=Sum/b;




попробуй заменить на это часть где происходит нахождение 0-x элементов и вычисление среднего значения.

Автор: klem4 19.03.2007 23:17

Человек_Без_Имени, твоя программа что-то совсем не то считает ... Проверил хотябы чтоли на парочке массивов, вот например

Цитата
(0,2,3,1,4,5,6,0,0,0);




i := 1;

while (i <= n - 1) and (x[i] <> 0) do inc(i);

if (i <= n - 1) and not ((x[i + 1] = 0) and (i + 1 <> n)) then begin

s := 0;
count := 0;
inc(i);

repeat
inc(count);
s := s + x[i];
inc(i);
until (i > n) or (x[i] = 0);

writeln((s / count):3:3);

end else writeln('В массиве нету искомого промежутка');

Автор: Человек_Без_Имени 21.03.2007 0:04


Упс, извиняюсь... give_rose.gif
Вот еще как один вариант(все работает, проверил)



program suma;
uses crt;
var f:array[1..10] of integer;
k,s,i,n:integer;
begin
n:=0;
k:=0;
for i:=1 to 10 do read(f[i]);
for i:=1 to 10 do
begin
if f[i]=0 then k:=k+1 else
if (k<2)and(k>0) then begin
s:=s+f[i];
n:=n+1;
end;
end;
if (k<=1) then writeln('Net 0-x elov ili toka odin ');
if n=0 then writeln('pervix 2 0-x elementa ryadom');
writeln('Sum=',s/n:0:2);
readkey;
end.



P.S. я тут недавно, просьба не судить строго rolleyes.gif

Автор: Widess 21.03.2007 17:46

Спасибо большое за помощь smile.gif

Автор: Sozialist 22.03.2007 2:43

Цитата(Widess @ 19.03.2007 17:32) *

И еще вопрос, не относящийся к этой задаче: как сделать так, чтобы в массиве с произвольными символами программа находила только символы кириллицы?
Заранее спасибо.

По коду ищи:
if ord(Symbol:Char) in [128..175,224..241] then ...

Автор: Алена 22.03.2007 3:05

Цитата
как сделать так, чтобы в массиве с произвольными символами программа находила только символы кириллицы?
Вообще-то на этот вопрос уже ответили: http://forum.pascal.net.ru/index.php?showtopic=16287