помогите, пожалуйста, девушке-блондинке... )) ни разу не работала с массивами, а здесь придется... программа простая сама понимаю.., но вам же не сложно мне помочь и написать вот это: Даны целые числа а1,а2,...,аn, среди которых могут быть повторяющиеся. Составьте новый массив из чисел, взятых по одному из каждой группы равных членов данной последовательности. Очень прошу..., буду благодарна за любую помощь...
ну раз мало того, что девушке, так еще и блондинке....
если я правильно поняла задание - то что-то вроде такого:
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:=1 to n do
begin
a[i]:=random(10);
fl:=true;
write(a[i], ' ');
for j:=1 to kol do
if b[j]=a[i] then
fl:=false;
if fl then
begin
inc(kol);
b[kol]:=a[i];
end;
end;
writeln;
for i:=1 to kol do
write(b[i],' ');
readln;
end.
ОГРОМНОЕ СПАСИБО, МИСС_ГРАФФИТИ!!! очень тебе благодарна за помощь!!!
ой... еще вопрос: здесь выводятся все члены последовательности без повторений, а как сделать, чтобы выводились только те, которые повторяются, но в единичном экземпляре(без тех, которые не повторяются в первоначальном массиве)?
{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:=1 to n do begin
a[i]:=random(10);
write(a[i],' ');
Take:=true;
for j:=1 to k do if All[j]=a[i] then Take:=false;
if Take then begin
inc(k);
All[k]:=a[i];
end
else begin
Take:=true;
for j:=1 to l do if Dup[j]=a[i] then Take:=false;
if Take then begin
Inc(l);
Dup[l]:=a[i]
end
end
end;
writeln;
for i:=1 to l do write(Dup[i],' ');
readln;
end.
{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:set of byte;
i,j:integer;
begin
for i:=1 to n do a[i]:=Random(r ); {заполняем массив случайными числами}
All:=[]; {готовим множество всех элементов}
Dup:=[]; {готовим множество для дублей}
for i:=1 to n do begin
Write(a[i]:3);
if a[i] in All then Dup:=Dup+[a[i]]; {заполняем множество дублей}
All:=All+[a[i]] {заполняем множество всех}
end;
WriteLn;
j:=0; {готовим счетчик выходного массива}
for i:=1 to n do if a[i] in Dup then begin
Inc(j); {увеличиваем счетчик выходного массива}
b[j]:=a[i]; {заполняем выходной массив}
Dup:=Dup-[a[i]] {убираем элемент из множества дублей}
end;
for i:=1 to j do Write(b[i]:3);
WriteLn;
ReadLn
end.
lapp, да имен переменных мне не жалко. просто обзывала их по привычке. fl - это flag...
но я не
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:=1 to n do
begin
a[i]:=random(10);
write(a[i], ' ');
end;
for i:=1 to n do
begin
fl:=false;{изначально считаем, что элемент нам не нужен}
for j:=1 to n do
if (a[i]=a[j]) and (i<>j) then {первая проверка: если элемент повторяющийся...}
fl:=true;{если первый тест пройден, задумываемся о том, что его можно взять}
if fl then {если решили, что предварительно он подходящий}
for j:=1 to kol do
if b[j]=a[i] then {то проверяем - может, мы его уже взяли?}
fl:=false;{второй раз брать не будем}
if fl then {если по всем критериям подходит}
begin
inc(kol);
b[kol]:=a[i];{то берем}
end;
end;
writeln;
for i:=1 to kol do
write(b[i],' ');
readln;
end.
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, я другой перевод встречала - царапать. Граффити (которое рисование) началось с выцарапывания картинок на стеклах в метро. Потом уже в ход пошли маркеры, баллончики и т.д.
y или i - в разных источниках по-разному... но я выбрала i
pusha, молодец, что стала разбираться, а не просто распечатала и пошла сдавать.