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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2011, 20:19   #1
proser93
Пользователь
 
Регистрация: 22.10.2011
Сообщений: 12
Смущение Заполнение массива цифрами со знаком

Здравствуйте! Требуется написать программу: "Дана последовательность символов d1+-d2+-d3+-...+-dn (каждое di - цифра, n>1), которая заканчивается точкой. Найти данную алгебраическую сумму."
Язык программирования: Паскаль.
Почему хочу создать массив - так как цифр может быть довольно много, возможно переполнение, но конечная сумма может входить в допустимый диапазон, то есть мне нужно считывать с клавиатуры символ (естественно с проверкой на правильные входные данные), и записывать в массив с соответствующим знаком (+или-), затем отсортировать массив так, чтобы в нем чередовались элементы со знаком + и -, и посчитать сумму.
Поможете мне с написанием такой программы? Я новичок, и плохо знаю синтаксис Паскаля. Заранее спасибо!)
proser93 вне форума Ответить с цитированием
Старый 22.10.2011, 20:53   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
затем отсортировать массив так, чтобы в нем чередовались элементы со знаком + и -, и посчитать сумму.
Зачем? от перестановки слагаемых сумма не меняется.
Фтопку массив, считай сумму по мере ввода чисел, и по барабану как они идут.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.10.2011, 20:58   #3
proser93
Пользователь
 
Регистрация: 22.10.2011
Сообщений: 12
По умолчанию

Stilet: да, сумма не меняется, но частичная сумма может выйти за границу допустимого диапазона, поэтому я хочу так сделать, чтобы частичная сумма была минимальной.
proser93 вне форума Ответить с цитированием
Старый 22.10.2011, 22:14   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
частичная сумма
Тоесть? Что имеется ввиду?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.10.2011, 22:27   #5
proser93
Пользователь
 
Регистрация: 22.10.2011
Сообщений: 12
По умолчанию

К примеру есть сумма 8+7-6 = 9, есть частичная сумма, равная 8+7=15, а ограничение стоит на 10, и получается, что вся сумма попадает в допустимый диапазон (<=10 в нашем случае), а частичная сумма 15 - не попадает, и возникает переполнение, и вся сумма посчитается неправильно.
А если чередовать цифры с разными знаками, то можно привести нашу сумму к такому виду: 8-6+7=9, при этом любая сумма первых n слагаемых <=10
как-то так)
proser93 вне форума Ответить с цитированием
Старый 22.10.2011, 23:31   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А-а-а...
Ну пипец задача...
М.м.м. Я даже не знаю, но ИМХО я бы делал два массива - один для положительных другой для отрицательных, сортировал их оба, и уже из обоих выбирал бы по очереди.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.10.2011, 01:29   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
а ограничение стоит на 10
в условиях исходной задачи не увидел никакого ограничения на величину частичной суммы.
Поэтому прошу пояснить, откуда появилось у Вас такое ограничение и чему конкретно оно равно.


p.s. ну, ладно 8+7-6=9 c ограничением 10. а как Вы вычислите, если будет 8-1+9 - ничего, никаких "переполнений" частичной суммы не будет?!


p.p.s. а так, согласен с Виталием - отсортировать числа по модулю и брать одно положительное - одно отрицательное...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.10.2011, 19:54   #8
proser93
Пользователь
 
Регистрация: 22.10.2011
Сообщений: 12
По умолчанию

ограничение 10 - немного преувеличил) и кстати насчет 8-1+9 легко, ведь частичная сумма тут одна - 8-1, равная 7 - все нормально))) (частичная сумма НЕ первых n слагаемых меня не интересует - ведь сложение идет последовательно слева направо)
ограничение - Maxint, т.к. цифр может быть очень много, и много подряд с одним знаком.
вот что написал, забив на это ограничение, но использовал строку:
Код:
program Project1;

uses
    Crt;
const
    N=['0'..'9'];
label 11;
var
    s:string;
    i,sum,t,c:integer;
    quit:integer;
begin
    quit:=0;
    repeat
    begin
11:
writeln('Hello, press "q" to quit, other button to continue');
 if readkey()='q' then quit:=1;
 writeln('Enter summ:');
repeat readln(s) until s[length(s)]='.';
val(s[1],t,c); sum:=t;
if s[1] in N then
for i:=2 to length(s)-1 do
  begin
    if (s[i] in N)and(s[i-1]='+')then
       begin
          val(s[ i ],t,c);
          sum:=sum+t;
       end
    else if (s[ i ] in N)and(s[i-1]='-')then
       begin
          val(s[ i ],t,c);
          sum:=sum-t;
      end
      else writeln('Wrong symbol in string:'); goto 11
  end
  else writeln('Wrong symbol in string'); goto 11;
writeln('sum=',sum);
quit :=1;
end
until quit=1;
writeln('Press Enter to quit');
readln;
end.
Возникли следующие проблемы: надо избавиться от goto, а так же я не могу разобраться, из-за чего программа не выходит при нажатии "q", хотя вроде цикл такой, какой нужно... и если так нельзя, тогда как, не используя метки, описать вышеизложенное?

Последний раз редактировалось Stilet; 23.10.2011 в 20:36.
proser93 вне форума Ответить с цитированием
Старый 26.10.2011, 17:25   #9
proser93
Пользователь
 
Регистрация: 22.10.2011
Сообщений: 12
По умолчанию

Тема закрыта, т.к. прогу написал
proser93 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заполнения массива разными цифрами у VB legendary Помощь студентам 1 30.11.2010 18:07
заполнение массива GaLiof JavaScript, Ajax 4 01.11.2010 20:36
Заполнение массива. Небесный Общие вопросы C/C++ 3 01.09.2009 01:39
Запись массива с цифрами файл, и его загрузка Kycaka Общие вопросы C/C++ 4 08.06.2009 22:38
Именовать элементы массива не цифрами, а словами. Air Общие вопросы Delphi 15 07.03.2008 18:49