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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 10.06.2010, 19:23   #1
/Mari/
 
Регистрация: 26.05.2010
Сообщений: 7
Печаль завтра экзамен, КТО НИББУДЬ!!! отзовитесь!!!!!ПАСКАЛЬ....

это задание по пакалю, одномерные массивы, помогите пожалуйста.. выдает ошибку
Дано натуральное число n. Получить сумму тех чисел вида exp(3*ln(i))-3*sqr(n)+n , i=1,2,3...n , которые являются удвоенными нечётными. При отсутствии таких чисел искомая сумма равна нулю.
я написала программу, но он ошибку 26 выдает, посмотрите пожалуйста
program primer;
uses crt;
var s,i,n: integer;
a: array [1..25] of integer;
begin
write('n');
read(n);
s:=0;
for i:= 1 to n do
begin
a[i]:= exp (3*ln(i))- 3*i*sqr(n) +n;
if a[i] mod 2 =0 then if ((round(a[i]/2)mod 2=1)) then
s:= s+a[i] else s:=0;
end;
write ('s=',s);
readkey;
end.
/Mari/ вне форума
Старый 10.06.2010, 19:46   #2
кусака
Пользователь
 
Регистрация: 26.04.2010
Сообщений: 19
По умолчанию

1)у вас все переменные типа integer а оператор round работает с типом real. отсюда несоответствие.
2) у вас a[i] должно быть удвоеным т.е. 2*a[i]

Последний раз редактировалось кусака; 10.06.2010 в 19:51.
кусака вне форума
Старый 10.06.2010, 19:49   #3
/Mari/
 
Регистрация: 26.05.2010
Сообщений: 7
По умолчанию

а что делать, mod работает только с integer
/Mari/ вне форума
Старый 10.06.2010, 19:52   #4
baster128
Форумчанин
 
Аватар для baster128
 
Регистрация: 24.04.2010
Сообщений: 205
По умолчанию

Сто лет на Паскале не писал. Но почему массив ограничен 25, если N будет =26 то будет ошибка. Сделай динамический массив:
Код:
A:array of integer;
begin
....
SetLength(a,n);
...
end.
Мне думается будет тип-топ.
baster128 вне форума
Старый 10.06.2010, 20:09   #5
baster128
Форумчанин
 
Аватар для baster128
 
Регистрация: 24.04.2010
Сообщений: 205
По умолчанию

Цитата:
Сообщение от кусака Посмотреть сообщение
1)у вас все переменные типа integer а оператор round работает с типом real. отсюда несоответствие.
2) у вас a[i] должно быть удвоеным т.е. 2*a[i]
Кстати Round игнорирует integer только что проверил. Никакой ошибки.
baster128 вне форума
Старый 10.06.2010, 20:19   #6
/Mari/
 
Регистрация: 26.05.2010
Сообщений: 7
По умолчанию !!!!!!!!!

ну помогите!!!!!
/Mari/ вне форума
Старый 10.06.2010, 20:25   #7
/Mari/
 
Регистрация: 26.05.2010
Сообщений: 7
По умолчанию

почему меня все игнорируют, если у вас получилось, скажите как пожалуйста!!!!
/Mari/ вне форума
Старый 10.06.2010, 20:37   #8
baster128
Форумчанин
 
Аватар для baster128
 
Регистрация: 24.04.2010
Сообщений: 205
По умолчанию

Цитата:
Сообщение от /Mari/ Посмотреть сообщение
почему меня все игнорируют, если у вас получилось, скажите как пожалуйста!!!!
Я не знаю получилось или нет. Просто попробуй, что я предложил
Код:
program primer;
uses crt;
var s,i,n: integer;
a: array of integer;
begin
write('n');
read(n);
SetLength(a,n);
s:=0;
for i:= 1 to n do
begin
a[i]:= Round(exp (3*ln(i))- 3*i*sqr(n) +n);
if a[i] mod 2 =0 then if ((round(a[i]/2)mod 2=1)) then
s:= s+a[i] else s:=0;
end;
write ('s=',s);
SetLength(a,0);
readkey;
end.

Проверил на Делфи вроде компелится.

Последний раз редактировалось baster128; 10.06.2010 в 20:50. Причина: Round поставил пред exp, а то ругается
baster128 вне форума
Старый 10.06.2010, 20:44   #9
tools
Форумчанин
 
Регистрация: 07.10.2008
Сообщений: 213
По умолчанию

Код:
a[i]:= exp (3*ln(i))- 3*i*sqr(n) +n
вот тут когда экспоненту считаем уже не целое число получается, а массив объявлен как array of integer, поменять надо и дальше идет операция mod, тоже для целых чисел. И кстати раз уж массив динамический, то длина N, а цикл от 0 до N-1.
Если правильно понял задание, то вот,посмотри такой вариант:
Код:
var
 i,n:integer;
 arr:array of real;
 summ:real;
 
 function nechet_X_2(b:real): boolean;
 var
   a:integer;
 begin
   nechet_X_2:=false;
   a:=round(b);
   if (a mod 2 = 0) and odd(a div 2) then                                    
      nechet_X_2:=true
 end;
 
begin
  summ:=0;
  write('Введите размерность массива:');
  readln(n);
  setlength(arr,n);
for i:=0 to n-1 do
begin
  arr[i]:=exp(3*ln(i))-3*sqr(n)+n;
  if nechet_X_2(arr[i]) then
  begin
    summ:=summ+arr[i];
    writeln(arr[i]:4:2);
  end;
end;
  writeln(#13#10'Сумма:',summ:4:2)  
end.

Последний раз редактировалось tools; 11.06.2010 в 02:26.
tools вне форума
Старый 10.06.2010, 21:11   #10
/Mari/
 
Регистрация: 26.05.2010
Сообщений: 7
Радость всем!!!!!

СПАСИБО ВСЕМ !!!!!! СПАСИБО ОГРОМНОЕ, вы просто супер!!!!
/Mari/ вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ПОМОГИТЕ......ЗАВТРА ЭКЗАМЕН!!!!!! Allen Iverson Помощь студентам 0 23.04.2009 20:33
Завтра экзамен((( Foxandrey Паскаль, Turbo Pascal, PascalABC.NET 0 14.12.2008 12:00
ПАСКАЛь... экзамен в среду...2 задачи не решеныюпомогите кто сможет Baby2 Паскаль, Turbo Pascal, PascalABC.NET 16 20.01.2007 23:42