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

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

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

Автор: Serg76 12.05.2008 0:14

1.Задан одномерный массив а (n). Найти количество, все номера и сумму элементов массива больших заданного числа alfa(здесь не пойму как найти и вывести ВСЕ номера элементов)
2.Дан одномерный массив y={yi}, i=1,n. Найти разность номеров ми¬нимального и макси¬мального элемен¬тов.
3.Дан массив а (n).Определить номера элементов = 5, количество положительных элементов для всего массива и сумму возведенных в квадрат отрицательных элементов стоящих на нечетных местах. (использовать repeat с шагом 2)
в двух других вобще завал.каму не сложно помогите пожалуйста

Автор: compiler 12.05.2008 0:38

1) заводи какую-нибудь динамическую структуру(например, очередь), где ты будешь их хранить и вноси все туда или выводи "по ходу"
2) ищешь минимум(запоминая индекс), аналогично максимум(можно за все за один проход). вычитаешь индексы.
3) про repeat, наверно, имеется ввиду, что перебирать не каждый элемент за одно изменение счётчика, а по два..

Автор: Serg76 12.05.2008 0:42

спасибо счас попробую good.gif

Добавлено через 19 мин.
если можно то еще раз с суммой и количеством элементов понятно а как мне описать чтоб все номера запоминались и выводились на экран?сдесь что то Я непойму unsure.gif

Автор: compiler 12.05.2008 1:13

Цитата(Serg76 @ 11.05.2008 20:42) *
номера запоминались и выводились на экран?сдесь что то Я непойму unsure.gif
если тебе надо просто вывести на экран, то проще было бы выводить по ходу -- нашел элемент- вывел номер. Если же надо запомнить и вывести, то
проходим по массиву, если элемент больше alfa, товзять модуль для работы с очередями можно тут: http://forum.pascal.net.ru/index.php?showtopic=2706#23594 , там же можно взять модули для работы с другими динам. структурами.

Автор: Serg76 12.05.2008 1:22

спс счас попробую))

Автор: Serg76 12.05.2008 1:53

проверти пожалуйста Я правильно понял

 var const n:=100;
a:arrey[1..n] of real;
Alf,Sum:real;
i,Kol:integer:
begin
writeln('введите alf');
writeln('введите элементы массива');
for i:=1 to n do readln(a[i]);
s:=0:kol:=0:
for i:=1 to n do begin
if a[i]>alf then begin s:=s+a[i];
kol:=kol+1;
writln('i='i);
end;
end;
writeln('s='s);
writeln('kol='kol);
end.

Автор: compiler 12.05.2008 2:06

Я) это должен читать? ты сначала попробуй это откомпилировать...

Автор: Айра 12.05.2008 2:06

Понял то вроде правильно, но вот программка компиляцию не проходит.. Попробуй исправить это сам? smile.gif

Автор: Serg76 12.05.2008 3:52

У меня возник еще один вопрос как можно в ОДНОМ цикле посчитать отрицательные элементы ДВУХ массивов а[n]
и b[n]. направти мысль а то что то ни как не соображу.

Автор: Айра 12.05.2008 9:33

Если каждого по отдельности, то нужно по переменной для каждого массива.. и проверка будет тоже для каждого своя..

Автор: Serg76 12.05.2008 12:32

нет просто дано два массива нужно посчитать в них количество (-)элементов,но сделать это в одном цикле( просто общее колличество

Автор: Айра 12.05.2008 17:23

тогда у тебя просто две проверки будет в цикле:

for i:=1 to n do
begin
if a[i]<0 then inc(k);
if b[i]<0 then inc(k);
end;


но это если количество элементов в обоих массивах одинаковое..

Автор: mind abuse 12.05.2008 18:24

Цитата(Айра @ 12.05.2008 14:23) *

но это если количество элементов в обоих массивах одинаковое..


Если неодинаковое, то тогда проверка if n>m, и считаем до того числа, которое больше

Код
Program t1;
uses
crt;
var
  a,b:array[1..1000] of real;
  i,Kol,n,m:integer;

begin
clrscr;

writeln('input number of elements of each array');
writeln('n=');
readln(n);
writeln('m=');
readln(m);

writeln('input elements');

for i:=1 to n do
begin
writeln('a[',i,']=');
readln(a[i]);
end;

for i:=1 to m do
begin
writeln('b[',i,']=');
readln(b[i]);
end;

kol:=0;

if n>m then

begin
for i:=1 to n do
begin
if a[i]<0 then inc(kol);
if b[i]<0 then inc(kol);
end;
end

else

begin
for i:=1 to m do
begin
if a[i]<0 then inc(kol);
if b[i]<0 then inc(kol);
end;
end;

writeln('kol=',kol);
end.



Кстати, подправил предыдущую:
Код
Program t1;
uses
crt;
var
  a:array[1..1000] of real;
  Alf,s:real;
  i,Kol,n:integer;

begin
clrscr;
n:=10;
writeln('input alf');
readln(Alf);
writeln('input elements');

for i:=1 to n do
readln(a[i]);
s:=0;
kol:=0;
for i:=1 to n do begin
if a[i]>alf
then
begin
s:=s+a[i];
kol:=kol+1;
writeln('i=',i);
end;
end;
writeln('s=',s);
writeln('kol=',kol);
end.


Автор: Serg76 12.05.2008 20:37

спасибо большое

Автор: Айра 13.05.2008 0:41

Цитата
Если неодинаковое, то тогда проверка if n>m, и считаем до того числа, которое больше

А я бы так сделала:
i:=1;
while (i<=n) or (i<=m) do
begin
if a[i]<0 then inc(kol);
if b[i]<0 then inc(kol);
inc(i);
end;


И нет лишнего кода..

Автор: mind abuse 13.05.2008 0:54

Согласен =)

Автор: Serg76 13.05.2008 4:43

Цитата(Serg76 @ 11.05.2008 21:14) *

3.Дан массив а (n).Определить номера элементов = 5, количество положительных элементов для всего массива и сумму возведенных в квадрат отрицательных элементов стоящих на нечетных местах. (использовать repeat с шагом 2)

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

Автор: Айра 13.05.2008 9:40

Так:

i:=1
repeat
....
inc(i,2)
....
until i>n

А вообще выкладывай то, что получилось\неполучилось.. Будем разбирать))

Автор: Serg76 13.05.2008 22:14

Всем спасибо за помощь этот этап пройден lol.gif lol.gif