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

miracle111
Сообщения: 5
Зарегистрирован: 27 фев 2008, 18:41

Помогите пожайлуста с Паскалем и решить задачку!

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

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

Зарание спасибо!
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

Вроде бы так:
[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]
Ни что так не ограничивает фантазию программиста, как компилятор...
C_O_D_E
Сообщения: 296
Зарегистрирован: 13 фев 2008, 20:10
Откуда: Беларусь. Орша
Контактная информация:

Мой вариант данного решения:

[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]
Если назначен специальный человек для контроля за чистотой исходной информации, то найдется изобратательный идиот, который придумает способ, чтобы неправильная информация прошла этот контроль.
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

Интересное решение, но есть один момент.
В конце после 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]
Ни что так не ограничивает фантазию программиста, как компилятор...
miracle111
Сообщения: 5
Зарегистрирован: 27 фев 2008, 18:41

Спасибо за данное решение задачи и потраченное время!
C_O_D_E
Сообщения: 296
Зарегистрирован: 13 фев 2008, 20:10
Откуда: Беларусь. Орша
Контактная информация:

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


Кстати, когда программа завершается, не успев выдать результат, я использую новомодную технологию ALT+F5. :)
самое смешное в данной ситуации, что работает!! :rolleyes:
Если назначен специальный человек для контроля за чистотой исходной информации, то найдется изобратательный идиот, который придумает способ, чтобы неправильная информация прошла этот контроль.
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

C_O_D_E писал(а):Уважаемый MOTOCoder, я не совсем поняла, что Вы хотите от этой бедной сортировки? Еще раз объяснить можно?
Да это я так, в качестве совета написал.
Просто при использовании этого алгоритма сортировки, особенно если массив большой, можно сократить число шагов программы, поставив в качестве конечного значения для внутреннего цикла счетчик внешнего. Просто нас так учили :) .
C_O_D_E писал(а): Кстати, когда программа завершается, не успев выдать результат, я использую новомодную технологию ALT+F5. :)
самое смешное в данной ситуации, что работает!! :rolleyes:
Ну, во-первых, это не очень красиво, во-вторых, я пишу в самодельной оболочке под windows, и там такой возможности просто нет. Кстати, это мысль, надо добавить. :)
Ни что так не ограничивает фантазию программиста, как компилятор...
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Если массивы небольшие, числа тоже небольшие - можно преобразовать массивы во множества, а потом уже проверять наличие оператором in
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Medved
Сообщения: 256
Зарегистрирован: 14 фев 2008, 20:51
Контактная информация:

&quot писал(а):Кстати, когда программа завершается, не успев выдать результат, я использую новомодную технологию ALT+F5.
Программа УСПЕВАЕТ выдать ответ, просто НЕКОТОРЫЕ не успевают его увидеть. В linuxe нет таких проблемм.
Ваши руки совершили идиотскую ошибку и будут оторваны!
[OK]
C_O_D_E
Сообщения: 296
Зарегистрирован: 13 фев 2008, 20:10
Откуда: Беларусь. Орша
Контактная информация:

Про Linux не говори даже не говори... в тему:
Windows не глючит?! ну это тогда точно вирус виноват...
Если назначен специальный человек для контроля за чистотой исходной информации, то найдется изобратательный идиот, который придумает способ, чтобы неправильная информация прошла этот контроль.
Ответить