помогите, пожалуйста, девушке-блондинке... )) ни разу не работала с массивами, а здесь придется... программа простая сама понимаю.., но вам же не сложно мне помочь и написать вот это: Даны целые числа а1,а2,...,аn, среди которых могут быть повторяющиеся. Составьте новый массив из чисел, взятых по одному из каждой группы равных членов данной последовательности. Очень прошу..., буду благодарна за любую помощь...
мисс_граффити
30.11.2006 21:54
ну раз мало того, что девушке, так еще и блондинке.... если я правильно поняла задание - то что-то вроде такого:
program blondi;
const n=10;
var a,b:array[1..n]of integer;
fl:boolean;
i,j,kol:integer;
begin
randomize;
kol:=0;
for i:=1to n dobegin
a[i]:=random(10);
fl:=true;
write(a[i], ' ');
for j:=1to kol doif b[j]=a[i] then
fl:=false;
if fl thenbegin
inc(kol);
b[kol]:=a[i];
end;
end;
writeln;
for i:=1to kol do
write(b[i],' ');
readln;
end.
pusha
1.12.2006 4:24
ОГРОМНОЕ СПАСИБО, МИСС_ГРАФФИТИ!!! очень тебе благодарна за помощь!!!
pusha
1.12.2006 5:03
ой... еще вопрос: здесь выводятся все члены последовательности без повторений, а как сделать, чтобы выводились только те, которые повторяются, но в единичном экземпляре(без тех, которые не повторяются в первоначальном массиве)?
Lapp
1.12.2006 9:01
Цитата(pusha @ 1.12.2006 2:03)
как сделать, чтобы выводились только те, которые повторяются, но в единичном экземпляре(без тех, которые не повторяются в первоначальном массиве)?
Если взять за основу код мисс_граффити, то нужно добавить еще один массив, который заполняется примерно так же. Я очень извиняюсь, но я изменил кое-какие названия переменных для большей корреляции с назначением. Так, выходной массив я назвал Dup (Duplication, дубли), а промежуточный - All (все различные элементы). Признак добавления элемента в массив я назвал Take (брать).
{for pusha, by Miss_Graffity & Lapp}{to delete all singles and duplications from array}const
n=10;
var
a,All,Dup:array[1..n]of integer;
i,j,k,l,Count:integer;
Take:boolean;
begin
k:=0;
l:=0;
for i:=1to n dobegin
a[i]:=random(10);
write(a[i],' ');
Take:=true;
for j:=1to k doif All[j]=a[i] then Take:=false;
if Take thenbegin
inc(k);
All[k]:=a[i];
endelsebegin
Take:=true;
for j:=1to l doif Dup[j]=a[i] then Take:=false;
if Take thenbegin
Inc(l);
Dup[l]:=a[i]
endendend;
writeln;
for i:=1to l do write(Dup[i],' ');
readln;
end.
Ниже - другой вариант решения. Он основан на множествах, что несет в себе некие преимущества (проще и быстрее), но и недостатки тоже: - множества не могут содержать более 255 элементов; - возможно, вы еще просто не проходили множества..
{for pusha by Lapp}{to delete singles and duplicates, uses sets}const
n=20;
r=20; {range, must be < 256}var
a,b:array[1..n]of integer;
All,Dup:setof byte;
i,j:integer;
beginfor i:=1to n do a[i]:=Random(r ); {заполняем массив случайными числами}
All:=[]; {готовим множество всех элементов}
Dup:=[]; {готовим множество для дублей}for i:=1to n dobegin
Write(a[i]:3);
if a[i] in All then Dup:=Dup+[a[i]]; {заполняем множество дублей}
All:=All+[a[i]] {заполняем множество всех}end;
WriteLn;
j:=0; {готовим счетчик выходного массива}for i:=1to n doif a[i] in Dup thenbegin
Inc(j); {увеличиваем счетчик выходного массива}
b[j]:=a[i]; {заполняем выходной массив}
Dup:=Dup-[a[i]] {убираем элемент из множества дублей}end;
for i:=1to j do Write(b[i]:3);
WriteLn;
ReadLn
end.
PS не вижу доказательств в профиле, что ты блондинка..
мисс_граффити
2.12.2006 0:06
lapp, да имен переменных мне не жалко. просто обзывала их по привычке. fl - это flag... но я не
Цитата
Miss_Graffity
, а Miss_Graffiti сорри за офф.
теперь по теме. если уж брать за основу мой код, то, продолжая следовать женской логике, новый массив создавать не будем. (переменные оставла, как были... )
program blondi;
const n=10;
var a,b:array[1..n]of integer;
fl:boolean;
i,j,kol:integer;
begin
randomize;
kol:=0;
{отделяем цикл с заполнением - потом будем работать только с готовым массивом}for i:=1to n dobegin
a[i]:=random(10);
write(a[i], ' ');
end;
for i:=1to n dobegin
fl:=false;{изначально считаем, что элемент нам не нужен}for j:=1to n doif (a[i]=a[j]) and (i<>j) then{первая проверка: если элемент повторяющийся...}
fl:=true;{если первый тест пройден, задумываемся о том, что его можно взять}if fl then{если решили, что предварительно он подходящий}for j:=1to kol doif b[j]=a[i] then{то проверяем - может, мы его уже взяли?}
fl:=false;{второй раз брать не будем}if fl then{если по всем критериям подходит}begin
inc(kol);
b[kol]:=a[i];{то берем}end;
end;
writeln;
for i:=1to kol do
write(b[i],' ');
readln;
end.
при желании, можно вывод не писать отдельным циклом, а делать сразу после принятия решения о том, что элемент нам подошел... имхо, не очень принципиальный вопрос.
pusha
2.12.2006 4:07
lapp и мисс_граффити еще раз огромное-преогромное спасибо за помощь!!! что не оставили на произвол... стыдно, конечно, но я вот стала разбираться в программах, вроде все поняла, кроме одного , объясните пожалуйста вот эту часть: например, изначальный массив 1 2 4 5 2 5...., первый повторяющийся элемент 2, дойдя до него, получаем, что if (a[i]=a[j]) and (i<>j) это условие выполняется, а значит f1:=true; далее в этом случае выполняется условие if f1 then for j:=1 to kol do if b[j]=a[i] then f1:=false; здесь непонятна строка for j:=1 to kol , ведь kol пока еще =0, и тогда цикл for j:=1 to 0 не выполниться ни разу? так что ли...?
Lapp
2.12.2006 7:28
Цитата
непонятна строка for j:=1 to kol , ведь kol пока еще =0, и тогда цикл for j:=1 to 0 не выполниться ни разу? так что ли...?
Да, именно так Если еще ничего не набрано, то и сравнивать не нужно. В этом дополнительное доказательство правильности совершаемых действий. Алгоритм внутрене согласован.
Однако - WOW! Кажется, ты меня убедила, что это ты сказала не из вежливости:
Цитата(pusha @ 30.11.2006 14:16)
ни разу не работала с массивами, а здесь придется...
Действительно, работаешь! Respect! Осталось убедить меня еще в одном пункте:
Цитата(lapp @ 1.12.2006 6:01)
PS не вижу доказательств в профиле, что ты блондинка..
Поспособствуешь? Sorry about offtop..
Lapp
2.12.2006 7:39
Цитата(мисс_граффити @ 1.12.2006 21:06)
но я не <...т-ссс!...> , а Miss_Graffiti
2 Miss_Graffiti: Извиняюсь... Слово какое-то не вполне английское, хотя явно пришло из английского, поэтому рука сама набирает "y".. Интересно, что по итальянски (предположительный источник) это вообще значит совсем не то: циклевать, скреплять, фальцевать
мисс_граффити
2.12.2006 16:51
самой, что ли, осветлиться?... lapp, я другой перевод встречала - царапать. Граффити (которое рисование) началось с выцарапывания картинок на стеклах в метро. Потом уже в ход пошли маркеры, баллончики и т.д. y или i - в разных источниках по-разному... но я выбрала i
pusha, молодец, что стала разбираться, а не просто распечатала и пошла сдавать.
pusha
2.12.2006 20:35
Цитата
Осталось убедить меня еще в одном пункте:
PS не вижу доказательств в профиле, что ты блондинка..
если честно, то в профиле не хочу размещать свое фото...мне кажется,что здесь это не так принципиально, как, например, на сайте знакомств...
Цитата
Поспособствуешь?
lapp, если тебе интересно (?), как я выгляжу, могу поспособствовать лично: выслать фото на e-mail...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.