Страница 1 из 2

Помогите решить задачку на Паскале

Добавлено: 27 фев 2008, 18:56
miracle111
Помогите пожайлуста с Паскалем и решить задачку!

Даны 2 массива целых чисел A и B, каждый из которых не содержит повторяющихся элементов.

Получить все элементы массива A и B, которые не входят в них одновременно.

Зарание спасибо!

Re: Помогите решить задачку на Паскале

Добавлено: 27 фев 2008, 21:06
MOTOCoder
Вроде бы так:
[syntax='Delphi']
program Arrays_pas;

const
N=5;

var
A,B:array[1..N] of integer;
i,j:integer;
bb:boolean;

begin
writeln('Введите массив A:');
for i:=1 to N do
readln(A);

writeln('Введите массив B:');
for i:=1 to N do
readln(B);

writeln;

for i:=1 to N do
begin
bb:=false;
for j:=1 to N do
if A=B[j] then
bb:=true;
if not bb then write(A,' ');
end;

for i:=1 to N do
begin
bb:=false;
for j:=1 to N do
if A[j]=B then
bb:=true;
if not bb then write(B,' ');
end;

readln;

end.
[/syntax]

Re: Помогите решить задачку на Паскале

Добавлено: 27 фев 2008, 21:24
C_O_D_E
Мой вариант данного решения:

[syntax=Delphi]
Const z=10000;
var i,j,n1,n2,k :integer;
A,B:array[1..z] of integer;

Begin
Writeln('Введите размерность массива A, а далее сам массив ');
Readln(n1);
for i:=1 to n1 do
begin
write('A[',i,']= ');
read(a);
end;
Writeln('Введите размерность массива B, а далее сам массив');
Readln(n2);
for i:=1 to n2 do
begin
write('B[',i,']= ');
read(B);
end;
{сортируем 1-ый массив}
for i:=1 to n1-1 do
for j:=i+1 to n1 do
if A >= A[j] then
begin
k:= A;
A:= A[j];
A[j]:= k;
end;
{сортируем 2-ой массив}
for i:=1 to n2-1 do
for j:=i+1 to n2 do
if B >= B[j] then
begin
k:= B;
B:= B[j];
B[j]:= k;
end;
Writeln ('Элементы, которые не входят в массивы одновременно ');
For i:=1 to n1 do begin
k:=0;
for j:=1 to n2 do begin
if A<>B[j] then inc(k)
else break;
end;
if k=n2 then write(a:4);
end;
For i:=1 to n2 do begin
k:=0;
for j:=1 to n1 do begin
if B[i]<>A[j] then inc(k)
else break;
end;
if k=n1 then write(B[i]:4);
end;
readln;
readln;
end.
[/syntax]

Re: Помогите решить задачку на Паскале

Добавлено: 27 фев 2008, 21:41
MOTOCoder
Интересное решение, но есть один момент.
В конце после readln нужно написать еще один readln, иначе программа
завершается, не успев выдать результат.
И еще один совет по поводу сортировки(относится и ко второму массиву)
[syntax='Delphi']
{сортируем 1-ый массив}
for i:=1 to n1-1 do
for j:=i+1 to{было} {n1} {стало}i do{здесь можно уменьшить число шагов цикла}
if A >= A[j] then
begin
k:= A;
A:= A[j];
A[j]:= k;
end;
[/syntax]

Re: Помогите решить задачку на Паскале

Добавлено: 27 фев 2008, 21:42
miracle111
Спасибо за данное решение задачи и потраченное время!

Re: Помогите решить задачку на Паскале

Добавлено: 27 фев 2008, 21:46
C_O_D_E
Уважаемый MOTOCoder, я не совсем поняла, что Вы хотите от этой бедной сортировки? Еще раз объяснить можно?


Кстати, когда программа завершается, не успев выдать результат, я использую новомодную технологию ALT+F5. :)
самое смешное в данной ситуации, что работает!! :rolleyes:

Re: Помогите решить задачку на Паскале

Добавлено: 28 фев 2008, 07:35
MOTOCoder
C_O_D_E писал(а):Уважаемый MOTOCoder, я не совсем поняла, что Вы хотите от этой бедной сортировки? Еще раз объяснить можно?
Да это я так, в качестве совета написал.
Просто при использовании этого алгоритма сортировки, особенно если массив большой, можно сократить число шагов программы, поставив в качестве конечного значения для внутреннего цикла счетчик внешнего. Просто нас так учили :) .
C_O_D_E писал(а): Кстати, когда программа завершается, не успев выдать результат, я использую новомодную технологию ALT+F5. :)
самое смешное в данной ситуации, что работает!! :rolleyes:
Ну, во-первых, это не очень красиво, во-вторых, я пишу в самодельной оболочке под windows, и там такой возможности просто нет. Кстати, это мысль, надо добавить. :)

Re: Помогите решить задачку на Паскале

Добавлено: 01 мар 2008, 19:57
Хыиуду
Если массивы небольшие, числа тоже небольшие - можно преобразовать массивы во множества, а потом уже проверять наличие оператором in

Re: Помогите решить задачку на Паскале

Добавлено: 03 мар 2008, 21:32
Medved
&quot писал(а):Кстати, когда программа завершается, не успев выдать результат, я использую новомодную технологию ALT+F5.
Программа УСПЕВАЕТ выдать ответ, просто НЕКОТОРЫЕ не успевают его увидеть. В linuxe нет таких проблемм.

Re: Помогите решить задачку на Паскале

Добавлено: 03 мар 2008, 22:42
C_O_D_E
Про Linux не говори даже не говори... в тему:
Windows не глючит?! ну это тогда точно вирус виноват...