Помогите решить задачку на Паскале
-
- Сообщения: 5
- Зарегистрирован: 27 фев 2008, 18:41
Помогите пожайлуста с Паскалем и решить задачку!
Даны 2 массива целых чисел A и B, каждый из которых не содержит повторяющихся элементов.
Получить все элементы массива A и B, которые не входят в них одновременно.
Зарание спасибо!
Даны 2 массива целых чисел A и B, каждый из которых не содержит повторяющихся элементов.
Получить все элементы массива A и B, которые не входят в них одновременно.
Зарание спасибо!
Вроде бы так:
[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]
[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]
Ни что так не ограничивает фантазию программиста, как компилятор...
-
- Сообщения: 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]
[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]
Если назначен специальный человек для контроля за чистотой исходной информации, то найдется изобратательный идиот, который придумает способ, чтобы неправильная информация прошла этот контроль.
Интересное решение, но есть один момент.
В конце после 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]
В конце после 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]
Ни что так не ограничивает фантазию программиста, как компилятор...
-
- Сообщения: 5
- Зарегистрирован: 27 фев 2008, 18:41
Спасибо за данное решение задачи и потраченное время!
-
- Сообщения: 296
- Зарегистрирован: 13 фев 2008, 20:10
- Откуда: Беларусь. Орша
- Контактная информация:
Уважаемый MOTOCoder, я не совсем поняла, что Вы хотите от этой бедной сортировки? Еще раз объяснить можно?
Кстати, когда программа завершается, не успев выдать результат, я использую новомодную технологию ALT+F5.
самое смешное в данной ситуации, что работает!!
Кстати, когда программа завершается, не успев выдать результат, я использую новомодную технологию ALT+F5.

самое смешное в данной ситуации, что работает!!

Если назначен специальный человек для контроля за чистотой исходной информации, то найдется изобратательный идиот, который придумает способ, чтобы неправильная информация прошла этот контроль.
Да это я так, в качестве совета написал.C_O_D_E писал(а):Уважаемый MOTOCoder, я не совсем поняла, что Вы хотите от этой бедной сортировки? Еще раз объяснить можно?
Просто при использовании этого алгоритма сортировки, особенно если массив большой, можно сократить число шагов программы, поставив в качестве конечного значения для внутреннего цикла счетчик внешнего. Просто нас так учили

Ну, во-первых, это не очень красиво, во-вторых, я пишу в самодельной оболочке под windows, и там такой возможности просто нет. Кстати, это мысль, надо добавить.C_O_D_E писал(а): Кстати, когда программа завершается, не успев выдать результат, я использую новомодную технологию ALT+F5.
самое смешное в данной ситуации, что работает!!![]()

Ни что так не ограничивает фантазию программиста, как компилятор...
Если массивы небольшие, числа тоже небольшие - можно преобразовать массивы во множества, а потом уже проверять наличие оператором in
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Программа УСПЕВАЕТ выдать ответ, просто НЕКОТОРЫЕ не успевают его увидеть. В linuxe нет таких проблемм." писал(а):Кстати, когда программа завершается, не успев выдать результат, я использую новомодную технологию ALT+F5.
Ваши руки совершили идиотскую ошибку и будут оторваны!
[OK]
[OK]
-
- Сообщения: 296
- Зарегистрирован: 13 фев 2008, 20:10
- Откуда: Беларусь. Орша
- Контактная информация:
Про Linux не говори даже не говори... в тему:
Windows не глючит?! ну это тогда точно вирус виноват...
Windows не глючит?! ну это тогда точно вирус виноват...
Если назначен специальный человек для контроля за чистотой исходной информации, то найдется изобратательный идиот, который придумает способ, чтобы неправильная информация прошла этот контроль.