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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2013, 21:49   #1
Настя М
Пользователь
 
Регистрация: 03.12.2013
Сообщений: 22
По умолчанию Работа с массивом и процедурой.

Составить процедуру нахождения суммы последних элементов одномерного массива, произведение которых не превышает заданного числа.
Пожалуйста, нужно исправить чтобы работала. А процедуру я потом сама напишу.
[CODE]
Program lab10;
uses crt;
var
a: array[1 .. 10] of integer;
f: text;
i,j,n,k,c: integer;

Begin
clrscr%

Последний раз редактировалось Stilet; 21.12.2013 в 22:20.
Настя М вне форума Ответить с цитированием
Старый 21.12.2013, 22:23   #2
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,538
По умолчанию

Есть такие волшебные символы [сode] и [/сode]
С ними вот так красиво получается, особенно если пробелы поставить. И понятнее:
Код:
while a[n]<c do
 for i:=1 downto n-1 do
  begin
   a[n]:=a[n]*a[i];
   k:=k+1;
  end;
Здесь происходит следующее:
пока a[n]<c (а это может быть всегда) - выполнять цикл, в котором i меняется так: 1, 0, -1, -2 , .... - 2147483648, 2147483647, 2147483646, ...., (n-1) . То есть очень длинный цикл в вечном цикле.

PS. Точнее, цикл for прервется после первого шага, потому что будет " ошибка доступа " изза недопустимого индекса.

Последний раз редактировалось type_Oleg; 21.12.2013 в 22:30.
type_Oleg вне форума Ответить с цитированием
Старый 21.12.2013, 22:36   #3
Настя М
Пользователь
 
Регистрация: 03.12.2013
Сообщений: 22
По умолчанию

Спасибо болшое!
Настя М вне форума Ответить с цитированием
Старый 21.12.2013, 22:44   #4
Настя М
Пользователь
 
Регистрация: 03.12.2013
Сообщений: 22
По умолчанию

А теперь что не так?
Код:
Program lab10;
uses crt;
var
a: array[1 .. 10] of integer;
f: text;
i,j,n,k,c: integer;

Begin
clrscr;
assign(f,'c:\lab10.txt');
reset(f);
i:=1;
n:=0;
while not eof(f) do
begin
readln(f,a[i]);
i:=i+1;
n:=n+1;
end;
read(c);
while a[n]<c do
  for i:=n-1 downto 1 do
    begin
    a[n]:=a[n]*a[i];
    k:=k+1;
    end;
for j:=n-1 downto n-k do
  a[n]:=a[n]+a[j];
writeln(a[n]);
end.

Последний раз редактировалось Stilet; 21.12.2013 в 22:56.
Настя М вне форума Ответить с цитированием
Старый 21.12.2013, 22:56   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Вот как я понял задачу:
Код:
Program lab10;
uses crt;
var
a: array[1 .. 10] of integer;
f: text;
i,j,n,k,c,p: integer;

Begin
clrscr;
assign(f,'c:\lab10.txt');
reset(f);
i:=1;
n:=0;
while not eof(f) do begin readln(f,a[i]); i:=i+1; n:=n+1; end;
read(c);

{Обрати внимание на окончание:}
p:=a[n]; c:=a[n]; dec(n); 
while (p<c)and(n>0) do begin p:=p*a[n]; c:=c+a[n]; dec(n); end;

writeln(c);
end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.12.2013, 23:22   #6
Настя М
Пользователь
 
Регистрация: 03.12.2013
Сообщений: 22
По умолчанию

Спасибо! Но программа считает в сумме на один элемент больше. Я понимаю почему, а как исправить не знаю.
Настя М вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с массивом glebast Помощь студентам 1 20.02.2013 16:53
Работа с массивом ZOHAN Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 10 16.04.2010 01:20
С++. Работа с массивом. Bonne Помощь студентам 2 10.02.2010 21:49
работа с массивом Андрей.12 Помощь студентам 2 22.10.2009 00:25
работа с массивом begemotikdin Паскаль, Turbo Pascal, PascalABC.NET 2 21.06.2008 21:40