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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2011, 23:15   #1
GoldSieg
Пользователь
 
Регистрация: 02.10.2011
Сообщений: 45
По умолчанию Массив чисел с разными знаками.

Здравствуйте. мне необходимо написать программу

Массив r длины N содержит элементы разных знаков. Составить программу построения массива rS, в котором все подряд идущие элементы массива r одного знака были бы заменены их суммой
я попытался написать прогу но конкретно запутался...
Код:
program rge;
type mas=array[-50..50]of real; 
var r:mas;
    i:integer;
    n,a,b:integer;
begin
a:=1; b:=1;
 write('n'); read(n);
 randomize;
 For i:=1 to n do r[i]:=i;
 For i:=1 to n do begin r[i]:=random(20)-10; end;
 for i:=1 to n do a:=r[i]; b:=r[i+1];
  if a>0 and b>0 then r[i]:=(a+b)
   else r:=(r[i]+r[i+1]);
   for i:=1 to n do writeln(r[i]);
 end.
GoldSieg вне форума Ответить с цитированием
Старый 22.10.2011, 00:29   #2
Dush
Форумчанин
 
Регистрация: 29.09.2011
Сообщений: 116
По умолчанию

1.
Код:
type mas=array[-50..50]of real;
так массивы не объявляют.
2.
Код:
For i:=1 to n do r[i]:=i;
это зачем?
алгоритм следующий:
объявляем переменную в которой будем хранить знак предидущего числа, например boolean (где 0 - отрицательное, 1 - положительное) или integer (где -1 - отрицательное , 1 - положительное)
в цикле начиная со второго элемента смотрим знак предидущего - совпадает со знаком текущего числа? если совпадает то прибавляем текущее число к переменной в которой храним сумму. если нет то записываем сумму в массив rS, "обнуляем" переменную суммы.
для записи в массив rS, насколько я понял, необходимо сохранять начальный индекс (с которого начинается последовательность чисел с одинаковым знаком) и записывать сумму от этого индекса до текущего.
в коде это будет примерно так:
Код:
Nachalo:=1;
for i:=2 to n do
begin
  if <знак предидущего элемента> = <знак текущего элемента> then s:=s+r[i]
  else 
  begin
    for j:=Nachalo to i-1 do rS[j]:=s;
    <знак предидущего элемента>:=-1 * <знак предидущего элемента>;
    s:=r[i];
    Nachalo:=i;
  end;
end;
Dush вне форума Ответить с цитированием
Старый 22.10.2011, 01:49   #3
GoldSieg
Пользователь
 
Регистрация: 02.10.2011
Сообщений: 45
По умолчанию

Благодарю!))
GoldSieg вне форума Ответить с цитированием
Старый 22.10.2011, 03:07   #4
GoldSieg
Пользователь
 
Регистрация: 02.10.2011
Сообщений: 45
По умолчанию

Код:
program rge;
var r:array[-50..50]of integer;
    rS:array[-50..50]of real;
    j,s,i:integer;
     Nh,n:integer;
    z1,z2:boolean; 
begin
Nh:=1;
z1:=false; z2:=false;
 write('Длинна ряда n='); read(n);
 randomize;
 write('Числовой РЯД');
 For i:=1 to n do begin r[i]:=random(20)-10;
 write('',r[i]:4); end;
  for i:=2 to n do 
  begin
   begin
  if r[i]<0 then z1:=true; z2:=false; else z1:=z2;
  end;
  begin
  if z1=z2 then s:=s+r[i]
   else; 
   begin
    for j:=Nh to i-1 do rS[j]:=s;
     z1:=z2;
     s:=r[i];
     Nh:=i;
   end;
  end;
  writeln();
  write('CУММА ЧИСЕЛ');
  for j:=2 to n do write('',rs[j]:4);
  end.
В чем ошибка?
GoldSieg вне форума Ответить с цитированием
Старый 22.10.2011, 11:23   #5
Dush
Форумчанин
 
Регистрация: 29.09.2011
Сообщений: 116
По умолчанию

Цитата:
Код:
type mas=array[-50..50]of real;
так массивы не объявляют.
я это написал не к тому, что определение массива запихнули в тип, а к тому что индексация массива производится от 0 а не от -50.

вы вообще пробовали пройтись трассировкой по программе и посмотреть где и какие ошибки?
Код:
begin
  if r[i]<0 then z1:=true; z2:=false; else z1:=z2;
  end;
  begin
что ЭТО?
вот текст программы.
Код:
var r:array[0..10]of integer;
    rS:array[0..10] of integer;
    j,s,i:integer;
    Nachalo,n:integer;
    ZnakOld,ZnakNew:boolean;

begin
randomize;
    For i:=0 to 10 do
    begin
      r[i]:=random(20)-10;
      write('',r[i]:4);
    end;

    Nachalo:=0;
    if r[0]<0 then ZnakOld:=false else ZnakOld:=True;
    s:=r[0];

    for i:=1 to 10 do
    begin
      if r[i]<0 then ZnakNew:=false else ZnakNew:=True;
      if ZnakOld = ZnakNew then s:=s+r[i]
      else
      begin
        for j:=Nachalo to i-1 do rS[j]:=s;
        ZnakOld:=not ZnakOld;
        s:=r[i];
        Nachalo:=i;
      end;
    end;
    for j:=Nachalo to i-1 do rS[j]:=s;
    Writeln;
    For i:=0 to 10 do
      write('',rs[i]:4);
    readln;

Последний раз редактировалось Dush; 22.10.2011 в 11:27.
Dush вне форума Ответить с цитированием
Старый 22.10.2011, 12:12   #6
GoldSieg
Пользователь
 
Регистрация: 02.10.2011
Сообщений: 45
По умолчанию

Ваша программа работает неправильно.
GoldSieg вне форума Ответить с цитированием
Старый 22.10.2011, 16:05   #7
Dush
Форумчанин
 
Регистрация: 29.09.2011
Сообщений: 116
По умолчанию

что работает не так как надо? давайте разберемся и исправим
Dush вне форума Ответить с цитированием
Старый 22.10.2011, 16:36   #8
GoldSieg
Пользователь
 
Регистрация: 02.10.2011
Сообщений: 45
По умолчанию

Давайте.) В ответе( в массиве не всегда появляются нужные значения)..

Последний раз редактировалось GoldSieg; 22.10.2011 в 16:41.
GoldSieg вне форума Ответить с цитированием
Старый 22.10.2011, 16:40   #9
GoldSieg
Пользователь
 
Регистрация: 02.10.2011
Сообщений: 45
По умолчанию

Извиняюсь устранил ошибку сам... действие пропускалось....

Последний раз редактировалось GoldSieg; 22.10.2011 в 16:43.
GoldSieg вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с подстановочными знаками donitz Microsoft Office Word 2 30.08.2011 06:44
Бестиповые файлы. Последовательность чисел разного типа с чередующимися знаками lvirusl Паскаль, Turbo Pascal, PascalABC.NET 4 28.06.2011 20:46
Найти номер первой пары соседних элементов с разными знаками, сумма которых меньше заданного числа sofiya Помощь студентам 4 20.02.2011 23:05
Найти номер последней пары соседних элементов с разными знаками Albert341 Общие вопросы Delphi 2 23.12.2010 10:12
Операции с разными типами чисел (real c integer не умножается!) uvamosk Помощь студентам 10 21.05.2009 21:14