Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.12.2010, 20:41   #1
Ekvental
Пользователь
 
Регистрация: 26.11.2010
Сообщений: 26
По умолчанию Отладка программы. turbo Pascal.

Программа должна выполняться в соответствие с условием данной задачи:
Имеются два массива АI(IO) и ВI(I2), содержащие , как положительные, так и отрицательные элементы. Получить новые массивы А2 и В2 соответственно только с положительными и только отрицательными элементами.
Требуется:
Требуется разработать программу нахождения отрицательных и положительных элементов, и их сортировки методом переноса в новые массивы в определённом порядке.
Описание программы:
Программа производит последовательное сравнение элементов массива А и массива В после чего происходит их распределение на положительные и отрицательные элементы. где из массива А1 переводится отрицательные элементы в массив А2.а положительные элементы массива В1 переводятся в массив В2.
Массив А1 и В1 имеют отрицательные и положительные элементы. Начинаем сортировку массивов А1 и В1 с первого элемента этих массивов, если первый элемент массива А1 положительный, то он идёт в новый массив А2, а если отрицательный элемент, то идёт в новый массив В2 и так последовательно проверяются все элементы массива.
Программа заканчивается тогда, когда все элементы массивов будут проверены и отправлены в новые определённые массивы.

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

Код:
program mas;
 uses crt;
 const n=6;
       m=12;
 var A: array [1..n] of integer;
     B: array [1..n] of integer;
     C: array [1..m] of integer;
     D: array [1..m] of integer;
    Error,i,k,l: integer;
     Ch:char;
     Label L1,L2;
begin
 ClrScr;
 textattr:=red;
 gotoxy(20,6);
 writeln('');
 gotoxy(20,7);
 writeln('');
 gotoxy(20,8);
 writeln('');
 gotoxy(20,9);
 writeln;
 gotoxy(40,13);
 writeln('');
 gotoxy(40,14);
 writeln('');
 gotoxy(40,15);
 textattr:=green;
 writeln('');
 textattr:=cyan;
 gotoxy(42,16);
 writeln('');
 gotoxy(20,21);
 write('');
 ch:=readkey;
L1: clrscr;
 gotoxy(3,5);
 writeln('');
 randomize;
 for i:=1 to n do begin
		    repeat
		    Write('A[',i,'] = ');
		    {$i-}
		    readln(A[i]);
		    Error:=IOResult;
		    {$i+}
		    IF (A[i]>10000) or (A[i]<-10000) or (error<>0) then
		    Writeln('Neverno zadan massiv.Povtorite vvod!');
		    until (A[i]<=10000) and(A[i]>=-10000) and (error=0);
		  end;
 clrscr;
 gotoxy(3,5);
 writeln('');
 randomize;
 for i:=1 to n do begin
		    repeat
		    Write('B[',i,'] = ');
		    {$i-}
		    readln(B[i]);
		    {$i+}
		    Error:=IOResult;
		    If (B[i]>10000) or (B[i]<-10000) or (error<>0) then
		    Writeln('Neverno zadan massiv.Povtorite vvod!');
		    until (B[i]<=10000) and (B[i]>=-10000) and (error=0);
		  end;
 ClrScr;
 k:=0;
 for i:=1 to m do begin
		    if A[i]>=0 then begin
				      k:=k+1;
				      C[k]:=A[i];
				    end;
		    if B[i]>=0 then begin
				      k:=k+1;
				      C[k]:=B[i];
				    end;
		  end;
 l:=0;
 for i:=1 to m do begin
		    if A[i]<0 then begin
				      l:=l+1;
				      D[l]:=A[i];
				   end;
		    if B[i]<0 then begin
				      l:=l+1;
				      D[l]:=B[i];
				   end;
 gotoxy(20,6);
 writeln('');
 gotoxy(20,7);
 for i:=1 to n do Write(A[i], ' ');
 writeln;
 gotoxy(20,8);
 writeln('');
 gotoxy(20,9);
 for i:=1 to n do Write(B[i], ' ');
 writeln;
 writeln;
 gotoxy(20,10);
 writeln('');
  gotoxy(20,11);
 for i:=1 to n do Write(C[i], ' ');
 writeln;
 gotoxy(20,13);
 writeln('');
 gotoxy(20,14);
 for i:=1 to n do Write(D[i], ' ');
 writeln;
 gotoxy(12,20);
 writeln('');
 L2:
 case readkey of
 #89:goto L1;
 #121: goto L1;
 #78: exit;
 #110: exit;
 end;
 readln;
 goto L2;
end;
end.
Ekvental вне форума Ответить с цитированием
Старый 30.12.2010, 17:25   #2
k0tone
Пользователь
 
Аватар для k0tone
 
Регистрация: 09.11.2010
Сообщений: 99
По умолчанию

Просмотрел ваш вариант программы, по моему он слегка не корректен.
Предлагаю вам просмотреть в моем исполнении:

Код:
program test;
uses crt;
const n=6;
var A1,B1:array [1..n] of integer;
    A2,B2:array [1..64] of integer;
    i,k,l,m:integer;

begin
clrscr;
randomize;
for i:=1 to n do
  begin
    A1[i]:=random(21)-10;
    write(A1[i]:4);
  end;
writeln;
for i:=1 to n do
  begin
    B1[i]:=random(21)-10;
    write(B1[i]:4);
  end;
writeln;
k:=1;
l:=1;
for i:=1 to n do
  begin
    if A1[i]<0 then
      begin
        A2[k]:=A1[i];
        k:=k+1;
      end;
    if B1[i]>=0 then
      begin
        B2[l]:=B1[i];
        l:=l+1;
      end;
  end;
writeln('-------------------------');
m:=k-1;
for i:=1 to m do
write(A2[i]:4);
writeln;
m:=l-1;
for i:=1 to m do
write(B2[i]:4);
writeln;
writeln('-------------------------');
k:=1;
l:=1;
for i:=1 to n do
  begin
    if A1[i]>=0 then
      begin
        A2[k]:=A1[i];
        k:=k+1;
      end;
    if A1[i]<0 then
      begin
        B2[l]:=A1[i];
        l:=l+1;
      end;
  end;
for i:=1 to n do
  begin
    if B1[i]<0 then
      begin
        B2[l]:=B1[i];
        l:=l+1;
      end;
    if B1[i]>=0 then
      begin
        A2[k]:=B1[i];
        k:=k+1;
      end;
  end;
m:=k-1;
for i:=1 to m do
write(A2[i]:4);
writeln;
m:=l-1;
for i:=1 to m do
write(B2[i]:4);
readln;
end.
P.S. Вам останется, только, применить правильную сортировку
Если я вам помог - нажмите на весы пот аватаркой!
k0tone вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Тип-запись(type ... record) в Delphi Pascal; отладка программы Legky Помощь студентам 1 22.12.2010 19:13
делаю бесплатно программы на turbo pascal 7 syava Фриланс 21 05.12.2010 12:30