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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2016, 22:14   #1
artems67
Пользователь
 
Регистрация: 17.11.2015
Сообщений: 62
По умолчанию Проблемы с обработкой массива в подпрограмме [Pascal]

Добрый день,

ТЗ

Составить функцию, исходными данными которой является масссив X(n), где подсчитывается число перемен знака в массиве X(n).


Код


Код:
Program Laba21_ivan;
uses crt;

var x:array [1..30] of integer;
    n,i:integer;

function kol (y:array of integer):integer; 
 var j,a,nn:integer;
 begin
  nn:=n; {Считывание заданной размерности массива в локальную переменную}
  kol:=0;
  a:=y[1]; {предыдущий элемент массива (начало с 1 элемента) }
  for j:=2 to nn do
    begin 
     if ( a >= 0 ) and ( y[j] < 0 ) then 
      begin
       kol:=kol+1; {Подсчитывает кол-во перемен знака в массиве}
       a:=y[j];
      end
     else if ( a < 0 ) and ( y[j] >= 0 ) then
      begin
       kol:=kol+1;
       a:=y[j];
      end
     else a:=y[j];
    end;
 end;

begin
clrscr;
write('n= ');
 readln(n);
for i:=1 to n do read(x[i]); {Ручной ввод массива}
writeln; writeln('kol-vo peremen znaka = ', kol(x));
readln; readln;
end.
Проблема в том, что если задать массив, где смена знака приходится на нулевой элемент (x[n] = 0), то он не вносит этот переход в переменную kol.

Пример

Массив: 0 -5 2 -3 4

Мой вывод: kol-vo peremen znaka = 3

Правильный вывод: kol-vo peremen znaka = 4
artems67 вне форума Ответить с цитированием
Старый 19.12.2016, 22:23   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Код:
a:=y[1];
if a=0 then ... // где смена знака приходится на нулевой элемент (x[n] = 0)
for j:=2 to ....
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 19.12.2016, 22:30   #3
artems67
Пользователь
 
Регистрация: 17.11.2015
Сообщений: 62
По умолчанию

А если 0 будет в середине или конце, к примеру ?

Вроде же этими сравнениями

Код:
if ( a >= 0 ) and ( y[j] < 0 )
и 2 случай

Код:
else if ( a < 0 ) and ( y[j] >= 0 ) then
должны учитывать нулевой элемент в массиве, а именно эти логические сравнения:

Код:
a >= 0
и

Код:
y[j] >= 0
соответственно.

Но почему они в подпрограмме не срабатывают ? Или я операторы условия некорректно расставил ?
artems67 вне форума Ответить с цитированием
Старый 19.12.2016, 22:30   #4
artems67
Пользователь
 
Регистрация: 17.11.2015
Сообщений: 62
По умолчанию

А если 0 будет в середине или конце, к примеру ?

Вроде же этими сравнениями

Код:
if ( a >= 0 ) and ( y[j] < 0 )
и 2 случай

Код:
else if ( a < 0 ) and ( y[j] >= 0 ) then
должны учитывать нулевой элемент в массиве, а именно эти логические сравнения:

Код:
a >= 0
и

Код:
y[j] >= 0
соответственно.

Но почему они в подпрограмме не срабатывают ? Или я операторы условия некорректно расставил ?
artems67 вне форума Ответить с цитированием
Старый 20.12.2016, 10:17   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

кроме сравнения a>=0 в цикле требуется И ДОПОЛНИТЕЛЬНОЕ условие.
которое в данном случае и не срабатывает.
А в альтернативном условии (else) a>0 (БЕЗ равенства) и теперь уже не срабатывает оно.
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать модуль к подпрограмме cska1325 Паскаль, Turbo Pascal, PascalABC.NET 1 06.01.2015 17:11
Проблемы с выборкой и обработкой данных Feelnoobskill PHP 1 14.11.2013 00:28
Работа с динамическим массивом в подпрограмме promer Общие вопросы Delphi 2 02.08.2013 13:10
Проблемы с обработкой событий мыши C# WPF Lexa_kltn Помощь студентам 0 15.10.2012 19:56
Составить полную спецификацию к подпрограмме ... petrower Помощь студентам 4 05.01.2012 16:56