Страница 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.

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

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

.
C_O_D_E писал(а):
Кстати, когда программа завершается, не успев выдать результат, я использую новомодную технологию ALT+F5.

самое смешное в данной ситуации, что работает!!
Ну, во-первых, это не очень красиво, во-вторых, я пишу в самодельной оболочке под windows, и там такой возможности просто нет. Кстати, это мысль, надо добавить.

Re: Помогите решить задачку на Паскале
Добавлено: 01 мар 2008, 19:57
Хыиуду
Если массивы небольшие, числа тоже небольшие - можно преобразовать массивы во множества, а потом уже проверять наличие оператором in
Re: Помогите решить задачку на Паскале
Добавлено: 03 мар 2008, 21:32
Medved
" писал(а):Кстати, когда программа завершается, не успев выдать результат, я использую новомодную технологию ALT+F5.
Программа УСПЕВАЕТ выдать ответ, просто НЕКОТОРЫЕ не успевают его увидеть. В linuxe нет таких проблемм.
Re: Помогите решить задачку на Паскале
Добавлено: 03 мар 2008, 22:42
C_O_D_E
Про Linux не говори даже не говори... в тему:
Windows не глючит?! ну это тогда точно вирус виноват...