IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Формирование массивов, Нужно из одного сформировать 2
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской

Репутация: -  0  +


Здравствуйте.
У меня такое задание:
Дан одномерный массив A. Сформировать на его основе 2 одномерных массива B и C таким образом,
чтобы в B входили четные элементы с первой половины массива А, а в массив C - нечетные элементы со второй половины массива А.
Вроде задание то и не очень сложное,
вроде все написал... но почему-то ошибка,
помогите пожалуйста.
Код

program massive_2_5;
CONST
     from=1;
     exit=10;
     half=exit DIV 2;
var
   mass: ARRAY [from..exit] OF INTEGER; {Главный массив}
   b: ARRAY [from..half] OF INTEGER; {Массив B}
   c: ARRAY [half..exit] OF INTEGER; {массив C}
   i, context, fm, posb, posc: byte;

begin
fm:=1;
writeln('‚ўҐ¤ЁвҐ ', exit, ' §­ зҐ­Ё© ¬ ббЁў : '); {сообщение чтобы пользователь ввел значение главного массива}

  for i:=from TO exit DO
    begin
      readln(context);
      mass[i]:=context;
    end;
posb:=1;
  for i:=from TO (exit DIV 2) DO {Пробегаемся по первой половине главного массива}
    begin
      if (mass[i] MOD 2)=0 then {Если его элементы делятся на 2 без остатка}
        begin
          b[posb]:=mass[i]; {То сохраняем его в массив B}
          posb:=posb+1; {И добавляем индекс}
        end;
    end;

posc:=1;

  for i:=((exit DIV 2)+1) TO exit DO {Тоже самое и с C}
    begin
      if (mass[i] MOD 2)<>0 then
        begin
          c[posc]:=mass[i];
          posc:=posc+1;
        end;
    end;


   {Вывод результата, пока только B}
  writeln;
  writeln('Њ ббЁў B: ');
  for i:=from to half DO
    begin
      write(b[i], ' ');

    end;
  writeln;
  writeln(b[2]);
readln;

end.


Но е-мое smile.gif
Ведь массивы записываются неверно!
Ну, я в плане - когда берешься его показать - выдается правильно только перый элемент массива, а другие - беспоряждочно и не удовлетворяют условию.
Причем я проверил тока массив B smile.gif
Пробовал ставить, при проверке, что-то вроде writeln
в смысле "if (mass[i] MOD 2)=0 then" и писать просто результат - работает ведь!
Подскажите, в чем проблема,
буду признаетелен ))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата(Домовой @ 3.04.2006 16:01)
когда берешься его показать - выдается правильно только перый элемент массива, а другие - беспоряждочно и не удовлетворяют условию.

А вот так попробуй:
...
for i:=from TO exit DO
begin
readln(context);
mass[i]:=context;
end;

posb := 0; posc := 0;

for i := 1 to exit do begin
if odd(mass[i]) and (i > half) then begin
posc := posc + 1; c[posc] := mass[i];
end
else
if not odd(mass[i]) and (i <= half) then begin
posb := posb + 1; b[posb] := mass[i];
end
end;

writeln;
writeln('Array B: ');
for i:=1 to posb DO
write(b[i], ' ');
writeln;

{ здесь распечатаешь массив С так же, как и B }
readln;
...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской

Репутация: -  0  +


Угу, сапсибо, volvo.
Попробую и так,
а вопрос - что за штука такая - odd, что-то я не припомню такой.
Это деление на 2?

Проверил, усё равно не работает ))
Т.е. работает, но так же - как и моя ))

Сообщение отредактировано: Домовой -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Не совсем... Это функция, возвращающая истину, если ее параметр НЕчетный (вместо того, чтобы делать
if X mod 2 = 1 then ...

делаем
if Odd(X) then ...
)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской

Репутация: -  0  +


Гм... все равно не работает ))
т.е. работает, но так же как и у меня...
может это мой дружище Паскаль издевается?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Цитата
Проверил, усё равно не работает ))


mad.gif Поймите же наконец, если бы оно не работало - я бы не запостил. Тебе что, скриншот привести? Я же ПРОВЕРЯЮ каждую программу, сколько повторять???

Исходные данные + полный текст программы + результат приведи!

Вот кстати скриншот:


Эскизы прикрепленных изображений
Прикрепленное изображение
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской

Репутация: -  0  +


Ладно ладно, зачем так нервничать то, я ж не хотел никого обидеть ))
Вот, полный код программы:
Код

program massive_2_5;
CONST
     from=1;
     exit=10;
     half=exit DIV 2;
var
   mass: ARRAY [from..exit] OF INTEGER;
   b: ARRAY [from..half] OF INTEGER;
   c: ARRAY [half..exit] OF INTEGER;
   i, context, fm, posb, posc: byte;

begin
fm:=1;
writeln('‚ўҐ¤ЁвҐ ', exit, ' §­ зҐ­Ё© ¬ ббЁў : ');

for i:=from TO exit DO
    begin
      readln(context);
      mass[i]:=context;
    end;

  posb := 0; posc := 0;

  for i := 1 to exit do begin
    if odd(mass[i]) and (i > half) then begin
      posc := posc + 1; c[posc] := mass[i];
    end
    else
      if not odd(mass[i]) and (i <= half) then begin
        posb := posb + 1; b[posb] := mass[i];
      end
  end;

  writeln;
  writeln('Array B: ');
  for i:=1 to posb DO
    write(b[i], ' ');
  writeln;
readln;

end.


Вот примеры ввхода данных для массива А:
4 8 12 3 9 1 7 3 10 2

Результат для массива B:
4 1 7
А по идее должно быть: 4 8 12

Видите, правильно только первая цифра.
Вот такой результат выдает мой паскаль
P.S. Скорее всего паскаль - сейчас проверил со скриншота -у меня другие результаты чем у тебя получаются sad.gif

Вот кстати тоже скриншот:

Сообщение отредактировано: Домовой -


Эскизы прикрепленных изображений
Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Паскаль ни при чем...
var
b: ARRAY [from..half] OF INTEGER;
c: ARRAY [half..exit] OF INTEGER;
Замени на
var
b: ARRAY [from..half] OF INTEGER;
c: ARRAY [from..half] OF INTEGER;


(у тебя же в обоих случаях отсчет с 1 будет начинаться)...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской

Репутация: -  0  +


Уфф...
Да, моя оплошность ))
Благодарю за помощь ))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 28.05.2017 19:11
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"