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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.03.2014, 19:48   #1
hars1
Пользователь
 
Регистрация: 18.03.2014
Сообщений: 11
Восклицание Программа в Паскале: Дан одномерный массив С размерностью N. Переставить местами первый и последний элемент массива, если...

Здравствуйте! Возникла проблема: препод по информатике задал задачу, но ее решить не могу (Помогите решить, пожалуйста.
УСЛОВИЕ: Дано одномерный массив С размерностью N.
НАДО: Переставить местами первый и последний элемент массива, если все положительные элементы массива на четных позициях и не превосходят заданное число Р, иначе сделать знаки всех элементов массива отрицательными.

ПОЖАЛУЙСТА, ПОМОГИТЕ, МНОГОЕ ЗАВИСИТ ОТ ЭТОГО ЗАДАНИЯ
hars1 вне форума Ответить с цитированием
Старый 18.03.2014, 21:12   #2
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,602
По умолчанию

Переменные, константы описаны? Массив заполнен?
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 18.03.2014, 21:39   #3
hars1
Пользователь
 
Регистрация: 18.03.2014
Сообщений: 11
По умолчанию

ничего не сделано
hars1 вне форума Ответить с цитированием
Старый 18.03.2014, 23:00   #4
hars1
Пользователь
 
Регистрация: 18.03.2014
Сообщений: 11
По умолчанию

Код:
program z1;
const n=10;
var a: array [1..n] of integer;
    buf,i,P:integer;
    f:byte;
begin
writeln('Введіть елементи масиву');
for i:=1 to n do
    begin
    write('a[',i,']=');
    readln(a[i]);
    end;
write('Введіть P: ');
readln(P);
f:=1;
for i:=1 to n do
    if f=1
       then
       if i mod 2 =0
          then if (a[i]>0) and (a[i]<P)
                  then f:=1
                  else f:=0
          else
       else break;
if f=1
   then begin
        buf:=a[1];
        a[1]:=a[n];
        a[n]:=buf;
        end
   else for i:=1 to n do
        a[i]:=-abs(a[i]);
for i:=1 to n do
    writeln(a[i]);
end.



вот что сделал,вроде работает, но неуверен что правильно



________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 18.03.2014 в 23:04.
hars1 вне форума Ответить с цитированием
Старый 18.03.2014, 23:08   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
вот что сделал,вроде работает, но неуверен что правильно
немножко замороченно внутри цикла, когда устанавливаете признак f в ноль. (я бы написал по другому!)

Но в целом код выглядит вполне себе рабочим.
На мой взгляд - годится!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.03.2014, 01:08   #6
hars1
Пользователь
 
Регистрация: 18.03.2014
Сообщений: 11
По умолчанию

как бы вы писали?
hars1 вне форума Ответить с цитированием
Старый 19.03.2014, 09:40   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

вместо
Цитата:
Код:
f:=1;
for i:=1 to n do
    if f=1
       then
       if i mod 2 =0
          then if (a[i]>0) and (a[i]<P)
                  then f:=1
                  else f:=0
          else
       else break;
Код:
f:=1;
i:=2;
while (i<=n) and (f=1) do
begin
  if not ((a[i]>0) and (a[i]<P)) then f:=0;
  i := i + 2;
end;
но учтите, что ваш код (как и мой код в данном примере, проверяет, стоят ли в чётных позициях массива положительные числа, меньшие P
а я сегодня перечитал задание.
Его, скорее, нужно по другому трактовать. Нужно проверить ВСЕ положительные числа в массиве, если они все стоят на чётных позициях (т.е. нет ни одного положительного числа, стоящего на нечётной позиции), и при этом ВСЕ положительные числа меньше P, тогда условие выполняется!

если читать задание в такой трактовке, тогда код проверки будет примерно такой:
Код:
f:=1;
i:=1;
while (i<=n) and (f=1) do
begin
  if a[i]>0 then {нашли положительное число}
        {если оно стоит в нечётной позиции или оно больше P - флаг сбросили}
    if (i mod 2 <> 0) or (a[i]>=P) then f:=0;
  i := i + 1;
end;
или такой :
Код:
f:=1;
for i:=1 to n do
begin
  if a[i]>0 then {нашли положительное число}
        {если оно стоит в нечётной позиции или оно больше P - флаг сбросили}
    if odd(i) or (a[i]>=P) then begin
      f:=0;
      break
    end;
end;
выбирайте понравившийся...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.03.2014, 17:30   #8
hars1
Пользователь
 
Регистрация: 18.03.2014
Сообщений: 11
По умолчанию

Понял,спасибо,помогли очень)
hars1 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан массив размерностью M*N. В каждой строке, где первый элемент больше всех остальных, увеличить все элементы на 10. (С) Kirillgr Помощь студентам 6 02.02.2014 22:25
Дан массив А [N,N] переставить местами А[1,1] и минимальный элемент массива olegatorka Visual C++ 3 07.11.2012 22:21
Дан числовой массив А, состоящий из n строк и m столбцов. Переставить местами ni и nj строки массива A. Aaaaa111 Помощь студентам 2 22.05.2012 18:20
[C++] Переставить местами первый минимальный и первый максимальный элементы массива Aaaaaa111 Помощь студентам 2 27.02.2012 11:56
Одномерный массив. Необходимо заменить последний положительный элемент на второй элемент массива кумитэ Паскаль, Turbo Pascal, PascalABC.NET 1 19.12.2011 16:44