![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Домовой |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 23 Пол: Мужской Репутация: ![]() ![]() ![]() |
Здравствуйте.
У меня такое задание: Дан одномерный массив 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. Но е-мое ![]() Ведь массивы записываются неверно! Ну, я в плане - когда берешься его показать - выдается правильно только перый элемент массива, а другие - беспоряждочно и не удовлетворяют условию. Причем я проверил тока массив B ![]() Пробовал ставить, при проверке, что-то вроде writeln в смысле "if (mass[i] MOD 2)=0 then" и писать просто результат - работает ведь! Подскажите, в чем проблема, буду признаетелен )) |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата(Домовой @ 3.04.2006 16:01) когда берешься его показать - выдается правильно только перый элемент массива, а другие - беспоряждочно и не удовлетворяют условию. А вот так попробуй: ... |
Домовой |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 23 Пол: Мужской Репутация: ![]() ![]() ![]() |
Угу, сапсибо, volvo.
Попробую и так, а вопрос - что за штука такая - odd, что-то я не припомню такой. Это деление на 2? Проверил, усё равно не работает )) Т.е. работает, но так же - как и моя )) Сообщение отредактировано: Домовой - 3.04.2006 16:29 |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Не совсем... Это функция, возвращающая истину, если ее параметр НЕчетный (вместо того, чтобы делать
if X mod 2 = 1 then ... делаем if Odd(X) then ...) |
Домовой |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 23 Пол: Мужской Репутация: ![]() ![]() ![]() |
Гм... все равно не работает ))
т.е. работает, но так же как и у меня... может это мой дружище Паскаль издевается? |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Цитата Проверил, усё равно не работает )) ![]() Исходные данные + полный текст программы + результат приведи! Вот кстати скриншот: Эскизы прикрепленных изображений ![]() |
Домовой |
![]()
Сообщение
#7
|
Новичок ![]() Группа: Пользователи Сообщений: 23 Пол: Мужской Репутация: ![]() ![]() ![]() |
Ладно ладно, зачем так нервничать то, я ж не хотел никого обидеть ))
Вот, полный код программы: Код 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. Скорее всего паскаль - сейчас проверил со скриншота -у меня другие результаты чем у тебя получаются ![]() Вот кстати тоже скриншот: Сообщение отредактировано: Домовой - 3.04.2006 16:43 Эскизы прикрепленных изображений ![]() |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Паскаль ни при чем...
varЗамени на var (у тебя же в обоих случаях отсчет с 1 будет начинаться)... |
Домовой |
![]()
Сообщение
#9
|
Новичок ![]() Группа: Пользователи Сообщений: 23 Пол: Мужской Репутация: ![]() ![]() ![]() |
Уфф...
Да, моя оплошность )) Благодарю за помощь )) |
![]() ![]() |
![]() |
Текстовая версия | 19.06.2025 13:24 |