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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.11.2012, 13:25   #1
Nastia1997
Пользователь
 
Регистрация: 22.10.2012
Сообщений: 12
По умолчанию Условный оператор

Здравствуйте,подтолкните ,пожалуйста ,к решению.
Даны :два числа a и b найти их произведение от a до b не включительно.
Вот,как я начала решать данную задачу :

var a,b,s,r:integer;
write ("a=');readen (a);
write(' b =");readen (b);
for r:=a to b (дальше нужно сделать так ,чтобы можно было найти произведение до b не включительно ).
Нужна ли еще одна переменная ,или я ошибаюсь?
(Если я ошибаюсь,то подскажите ,как лучше решить ).
Nastia1997 вне форума Ответить с цитированием
Старый 01.11.2012, 13:28   #2
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

Смутные воспоминания о паскале, но это некомпилябельно.
Помог? Оставляем отзыв =)
Helloween вне форума Ответить с цитированием
Старый 01.11.2012, 13:33   #3
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Нужна переменная-аккумулятор, в которую будет "собираться" произведение.
Перед началом цикла она устанавливается в 1, и на каждой итерации домножается на переменную цикла (r).
Последний раз цикл выполняется при том значении r, которое указано после to. В Вашем случае, Вам нужно произведение чисел от a до (b-1).

P.S. Это, конечно, если задание звучит как "найти произведение всех целых чисел от a до b не включительно". Фраза "найти их произведение от a до b не включительно" лично для меня не несёт никакого смысла.

Последний раз редактировалось Abstraction; 01.11.2012 в 13:35.
Abstraction вне форума Ответить с цитированием
Старый 01.11.2012, 13:38   #4
Nastia1997
Пользователь
 
Регистрация: 22.10.2012
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
Нужна переменная-аккумулятор, в которую будет "собираться" произведение.
Перед началом цикла она устанавливается в 1, и на каждой итерации домножается на переменную цикла (r).
Последний раз цикл выполняется при том значении r, которое указано после to. В Вашем случае, Вам нужно произведение чисел от a до (b-1).

P.S. Это, конечно, если задание звучит как "найти произведение всех целых чисел от a до b не включительно". Фраза "найти их произведение от a до b не включительно" лично для меня не несёт никакого смысла.
Задание звучало именно так.Я думаю,что тут говорится о целых числах.

Я правильно Вас поняла :
Код:
var:a,b,s,r;
write ("a=') ;readen (a);
write ("b=") ;readen (b);
r=b-1;
for r:=a to b do s:=s*r;
write (s);
readln.
end.


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

Последний раз редактировалось Stilet; 01.11.2012 в 23:46.
Nastia1997 вне форума Ответить с цитированием
Старый 01.11.2012, 14:34   #5
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Нет. Как только Вы вошли в цикл, r присвоено a, поэтому предыдущее присваивание смысла не имеет (и присваивание в Pascal пишется := ). Точно так же, s изначально у Вас ничего не присвоено, что означает, что значение этой переменной произвольно. Следует, таким образом, убрать строку "r=b-1" и заменить строкой, присваивающей s значение 1.

Такой код (если, конечно, я правильно помню синтаксис Pascal - впрочем, можете проверить) при условии задания типа для всех переменных Integer (к слову, у Вас вместо объявления что-то странное, компилятор должен зарезать), будет считать произведение всех чисел от a до b. Вам надо - от a до (b-1). Вывод? Поменяйте предельное значение цикла с b на...
Abstraction вне форума Ответить с цитированием
Старый 01.11.2012, 14:34   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

чуть-чуть не так..
нужно примерно так:
Код:
var a,b,r : integer;
   s : longint;   
begin
  write ('a='); readLn (a);
  write ('b='); readLn (b);
  s := 1;
  for r:=a to b-1 do s := s*r;
  writeln (s);
  readln
end.

и ещё. небольшое лирическое отступление...
язык программирования - это очень строгая вещь. Он не допускает вольностей.
Вы в своей программе умудрились сделать 100500 мелких опечаток, описок и т.п.
это всё приводит, в лучшем случае, к тому, что код не компилируется, в худшем - код будет работать неверно!
Надо быть очень внимательным!
"Тщательнее надо, ребята, тщательнее" (с) М.М.Жванецкий

Последний раз редактировалось Serge_Bliznykov; 01.11.2012 в 14:37.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.11.2012, 14:38   #7
Nastia1997
Пользователь
 
Регистрация: 22.10.2012
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
чуть-чуть не так..
нужно примерно так:
Код:
var a,b,r : integer;
   s : longint;   
begin
  write ('a='); readLn (a);
  write ('b='); readLn (b);
  s := 1;
  for r:=a to b-1 do s := s*r;
  writeln (s);
  readln
end.
Спасибо огромное !Я пыталась решить сама,но видимо не получилось)) Мы просто не использовали никогда слово "longint" .

[QUOTE=Serge_Bliznykov;1123173]чуть-чуть не так..
нужно примерно так:
А вот можно так ?
var a,b,s,r: integer;
(и дальше все оставить так ,как Вы сказали )

Последний раз редактировалось Stilet; 01.11.2012 в 23:54.
Nastia1997 вне форума Ответить с цитированием
Старый 01.11.2012, 14:50   #8
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Да. longint нужен в том случае, если в "обычный" integer произведение "не влезет" (максимальное допустимое значение типа integer - 2^31-1, чуть больше двух миллиардов).
Abstraction вне форума Ответить с цитированием
Старый 01.11.2012, 14:54   #9
Nastia1997
Пользователь
 
Регистрация: 22.10.2012
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
Да. longint нужен в том случае, если в "обычный" integer произведение "не влезет" (максимальное допустимое значение типа integer - 2^31-1, чуть больше двух миллиардов).
Эххх,спасибо большое ))Уточнила ,чтобы потом у учителя не было лишних вопросов
Nastia1997 вне форума Ответить с цитированием
Старый 01.11.2012, 15:30   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
максимальное допустимое значение типа integer - 2^31-1, чуть больше двух миллиардов).
к сожалению, Вы не совсем правы: Integer - платформно (процессорно)-зависимый тип данных..

например, в TurboPascal целочисленные типы данных:
Цитата:
Код:
Turbo Pascal provides five predefined Integer
types. Each type denotes a specific subset of
the whole numbers, as shown here:

   Type     Range                   Format
   Shortint -128..127               Signed 8-bit
   Integer  -32768..32767           Signed 16-bit
   Longint  -2147483648..2147483647 Signed 32-bit
   Byte     0..255                  Unsigned 8-bit
   Word     0..65535                Unsigned 16-bit

All Integer types are ordinal types.
т.е. видим, что Integer в этом случае не может принимать значения больше чем 32767...

если речь идёт про компиляторы в Win32 код, то да, Integer представлен 4 байтами и может быть от -2147483648 до 2147483647...

FYI, так сказать...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Условный оператор,оператор цикла и массив Klark73 Microsoft Office Excel 1 19.12.2011 17:09
Условный оператор. Оператор выбора. евгенийзууу Паскаль, Turbo Pascal, PascalABC.NET 3 05.12.2011 14:37
Оператор выбора или условный оператор[Перенесено из JavaSE] merhaba1992 Помощь студентам 1 20.01.2011 17:06
Условный оператор. Оператор выбора. Pascal Сержuk Помощь студентам 4 17.11.2010 12:50