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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.01.2010, 12:00   #1
Brian Spilner
Пользователь
 
Регистрация: 17.01.2010
Сообщений: 14
По умолчанию Pascal. 3 массива.

Всем привет.
Поставлена задача. Даны 2 массива. В обоих по 10 элементов максимум. Надо пробежать по обоим и из отрицательных элементов обоих массивов составить третий массив. На выходе: массив из отрицательных элементов.
Собственно у меня получилось только пробежать по обоим массивам и отобрать нужные элементы ( выяснить их кол-во ). А вот сами элементы у меня нулевыми отображаются.
Сам вопрос в том, что как указать элементы, которые должны быть на выходе?? Точнее как их указать, что они из других массивов или как их запихнуть в один???
Вот код
Код:
program gefest;
uses crt;
var
a,b:array[1..10] of integer;
c:array[1..20] of integer;
i,n,j,k,l:integer;
schet:integer;
begin
clrscr;
writeln;
writeln('Программа строит массив из элементов двух исходных массивов,');
writeln('учитываются только отрицательные элементы.');
writeln;
repeat
write('Введите максимальное кол-во элементов массива а - ');
read(n);
 if (n<=0) or (n>10) then
  begin
   writeln('Ошибка, невозможное число элементов');
   writeln;
  end;
until (n>=1) and (n<=10);
writeln;
repeat
write('Введите максимальное кол-во элементов массива b - ');
read(k);
 if (k<=0) or (k>10) then
  begin
   writeln('Ошибка, невозможное число элементов');
   writeln;
  end;
until (k>=1) and (k<=10);
writeln;
writeln('Теперь заполним массив а');
writeln;
 for i:=1 to n do
  begin
   write('Сейчас вводите''[',i,']''элемент массива а, равный - ');
   read(a[i]);
  end;
 writeln;
 writeln('Теперь заполним массив b');
 writeln;
  for j:=1 to k do
   begin
    write('Сейчас вводите''[',j,']''элемент массива* b, равный - ');
    read(b[j]);
   end;
  writeln;
  writeln('Готовые массивы');
  writeln;
  writeln('Массив а');
  writeln;
   for i:=1 to n do
    write(a[i],' ');
    writeln;
   writeln('Массив b');
   writeln;
    for j:=1 to k do
     write(b[j],' ');
    writeln;  
    schet:=0;
     for i:=1 to n do
      if (a[i]<0) then
       begin
        schet:=schet+1;
       end
      else
       schet:=schet+0;
        for j:=1 to k do
         if (b[j]<0) then
          begin
           schet:=schet+1;
          end
         else
          schet:=schet+0;
         writeln('Кол-во элементов в получившемся массиве ',schet);
         writeln;
         writeln('Итоговый массив');
         writeln;
          for i:=1 to schet do
           write(c[l],' ');
repeat until keypressed;
end.

Последний раз редактировалось Stilet; 18.01.2010 в 12:02.
Brian Spilner вне форума Ответить с цитированием
Старый 18.01.2010, 12:06   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Что-то ты накрутил тут...
Вот предлагаю попроще вариант:
Код:
  var
  a,b:array[1..10] of integer;
  c:array[1..20] of integer;
  i,n,j,k,l:integer;
begin    k:=1;
 for i:=1 to 10 do begin
  a[i]:=10-random(20);
  b[i]:=10-random(20);
  writeln(a[i]:10,b[i]:10);
  if a[i]<0 then begin c[k]:=a[i];inc(k);end;
  if b[i]<0 then begin c[k]:=b[i];inc(k);end;
 end;
 writeln;
 for i:=1 to k-1 do begin
  write(c[i]:5);
 end;
 readln;
  { TODO -oUser -cConsole Main : Insert code here }
end.
Смысл понятен?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.01.2010, 12:18   #3
Brian Spilner
Пользователь
 
Регистрация: 17.01.2010
Сообщений: 14
По умолчанию

Смысл понятен. И ошибка моя тоже вроде понятна. Я переменные задавал так: a - первый массив, i - элемент массива а, b - второй массив, j - элемент массива b, с - третий массив, l - его элемент.
А получается, можно i использовать в двух массивах??? Просто вот в этом и затык, т.к. я долго и упорно пытался перекинуть a[i] и b[j] в с[l] пока не понял, что это не реализуемо помоему.
Brian Spilner вне форума Ответить с цитированием
Старый 18.01.2010, 12:19   #4
ViNcHeStEr
Delphi
Форумчанин
 
Регистрация: 12.06.2008
Сообщений: 137
По умолчанию

Вот как у меня получилось:
Код:
var
 mas1,mas2:array[1..10] of integer;
 mas:array[1..20] of integer;
 i,n:integer;

begin
 randomize;
 for i:=1 to 10 do
  begin
   mas1[i]:=random(21)-10;
   mas2[i]:=random(21)-10;
   writeln(inttostr(mas1[i])+' '+inttostr(mas2[i]));
  end;
 readln;

 n:=1;
 for i:=1 to 10 do
  begin
   if mas1[i]<0 then
    begin
     mas[n]:=mas1[i];
     writeln(mas[n]);
     inc(n);
    end;
   if mas2[i]<0 then
    begin
     mas[n]:=mas2[i];
     writeln(mas[n]);
     inc(n);
    end;
  end;
 readln;
ViNcHeStEr вне форума Ответить с цитированием
Старый 18.01.2010, 12:28   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А получается, можно i использовать в двух массивах?
Вообще не рекомендуется. Но я такой финт выкинул только потому что массивы у тебя одинаковы, и действия с ними можно синхронизировать.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.01.2010, 12:31   #6
Brian Spilner
Пользователь
 
Регистрация: 17.01.2010
Сообщений: 14
По умолчанию

А n - это счетчик? А почему он с 1 идет, а не с 0? Просто, я не так давно начал все это изучать, и часто счетчик обнуляется. Просто тут же пустой массив, если например не будет совсем отрицательных элементов ни где.
Brian Spilner вне форума Ответить с цитированием
Старый 18.01.2010, 12:37   #7
ViNcHeStEr
Delphi
Форумчанин
 
Регистрация: 12.06.2008
Сообщений: 137
По умолчанию

mas:array[1..20] of integer; - от 1 до 20
Поэтому и n идёт с единицы.
n - указывает на ячейку массива в которую следует записать число.

Можно было бы сделать и с нуля, но тогда нужно немного переделать код
Код:
 n:=0;
 for i:=1 to 10 do
  begin
   if mas1[i]<0 then
    begin
     inc(n);
     mas[n]:=mas1[i];
     writeln(mas[n]);
    end;
   if mas2[i]<0 then
    begin
     inc(n);
     mas[n]:=mas2[i];
     writeln(mas[n]);
    end;
  end;
 readln;
ViNcHeStEr вне форума Ответить с цитированием
Старый 18.01.2010, 12:44   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Просто тут же пустой массив, если например не будет совсем отрицательных элементов ни где.
Ну и что? Пустой массив тоже результат
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.01.2010, 13:22   #9
Brian Spilner
Пользователь
 
Регистрация: 17.01.2010
Сообщений: 14
По умолчанию

Все. Большое спасибо. Разобрался в механике этого процесса =) А то у меня одни нули были, хотя и в нужном кол-ве. Большое спасибо ребят!!!
Brian Spilner вне форума Ответить с цитированием
Старый 18.01.2010, 13:42   #10
Brian Spilner
Пользователь
 
Регистрация: 17.01.2010
Сообщений: 14
По умолчанию

Единственное, что не понятно, так это как работает строчка
mas[n]:=mas[i] - винчестера или аналогичная c[k]:=a[i] - у стилета. Ведь n и k - это же просто счетчики...или нет? Как я понял, они же просто хранят количество чего либо ( ну в данном случае элементов )...т.е. этот параметр определяет число элементов. Сам он не является элементом массива...или является?
Brian Spilner вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка массива (Pascal) Kion Помощь студентам 4 07.10.2009 23:34
Обработка двумерного массива (Pascal) VertU Помощь студентам 9 27.06.2009 08:02
3 максимальных элемента массива (pascal) deceiver Помощь студентам 14 22.03.2009 08:09
[Pascal] заполнение двумерного массива Рамик Помощь студентам 13 18.02.2009 20:08
Pascal - сортировка массива(файла?) kossner Помощь студентам 14 05.12.2008 14:57