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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2011, 16:13   #1
Narim
Пользователь
 
Регистрация: 14.11.2010
Сообщений: 26
По умолчанию указатели

здравствуйте, не выходит с задачей, можете исправить, код сам идет, только вычисляет не правильно, вот условие: задача на языке СИ)
Даны натуральное число n, действительные числа x1...,xn. вычислить: x1xn+x2xn-1+...+xnx1
#include <stdio.h>
#include <conio.h>
#define n 4
main()
{
clrscr();
int x[n],i,s,*ptr;
printf(" massiv\n");
for(i=0;i<n;i++)
scanf("%d",&x[i]);
ptr=x; s=0;
for(i=0;i<n;i++)
s+=*(ptr+i)**(ptr+2*n-1-i);
printf("s=%d\n",s);
getch();
return 0;
}
заранее спасибо. ( программа с использованием указателей)

Последний раз редактировалось Narim; 06.04.2011 в 16:40.
Narim вне форума Ответить с цитированием
Старый 06.04.2011, 16:25   #2
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Цитата:
Даны натуральное число n, действительные числа x1...,xn. вычислить:
... так что вычислить-то?

ЗЫ код надо бы правильно оформить (кнопочка с "решеткой")
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 06.04.2011, 16:27   #3
mikillskegg
Пользователь
 
Регистрация: 02.04.2011
Сообщений: 36
По умолчанию

А что программа должна вычислять?
mikillskegg вне форума Ответить с цитированием
Старый 06.04.2011, 16:30   #4
Narim
Пользователь
 
Регистрация: 14.11.2010
Сообщений: 26
По умолчанию

вычислить это x1xn+x2xn-2+...+xnx1,
Narim вне форума Ответить с цитированием
Старый 06.04.2011, 16:31   #5
Narim
Пользователь
 
Регистрация: 14.11.2010
Сообщений: 26
По умолчанию

имею ввиду что ответ непонятно как считает.
Narim вне форума Ответить с цитированием
Старый 06.04.2011, 16:32   #6
ololo-schoolboy
Форумчанин
 
Регистрация: 25.12.2010
Сообщений: 247
По умолчанию

не воткнул что надо, но (ptr+2*n-1-i) явно находится за пределами массива
ololo-schoolboy вне форума Ответить с цитированием
Старый 06.04.2011, 16:43   #7
Narim
Пользователь
 
Регистрация: 14.11.2010
Сообщений: 26
По умолчанию

извиняюсь) не правильно написал, в условии будет так x1xn+x2xn-1+...+xnx1
Narim вне форума Ответить с цитированием
Старый 06.04.2011, 18:16   #8
mikillskegg
Пользователь
 
Регистрация: 02.04.2011
Сообщений: 36
По умолчанию

Надо писать так:

for(i=0; i<n; i++)
s+=*(ptr+i)**(ptr+n-1-i);

А еще лучше так:

for(i=0; i<(n/2); i++)
s+=*(ptr+i)**(ptr+n-1-i);
s *= 2;

Последний раз редактировалось mikillskegg; 06.04.2011 в 19:27.
mikillskegg вне форума Ответить с цитированием
Старый 06.04.2011, 18:21   #9
Ezhuk
Форумчанин
 
Регистрация: 09.10.2010
Сообщений: 217
По умолчанию

Код:
for(i=0; i<(n/2); i++)
s+=*(ptr+i)**(ptr+n-i);
s *= 2;
if(n%2==1)
s+=*(ptr+n/2+1);
Если уж оптимизировать, то правильно.
Ёж птица гордая, пока не пнешь не полетит.
Ezhuk вне форума Ответить с цитированием
Старый 06.04.2011, 19:05   #10
mikillskegg
Пользователь
 
Регистрация: 02.04.2011
Сообщений: 36
По умолчанию

Цитата:
Сообщение от Ezhuk Посмотреть сообщение
Код:
for(i=0; i<(n/2); i++)
s+=*(ptr+i)**(ptr+n-i);
s *= 2;
if(n%2==1)
s+=*(ptr+n/2+1);
Если уж оптимизировать, то правильно.
А вот и неправильно.
s+=*(ptr + n/2)*(*(ptr + n/2));


А еще можно сделать:
s <<= 1;

Последний раз редактировалось mikillskegg; 06.04.2011 в 19:27.
mikillskegg вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
указатели в С++ Aleksa_ks Помощь студентам 3 27.04.2010 19:31
C++ указатели. tshen Помощь студентам 3 16.04.2010 22:00
Указатели Paul_AG Общие вопросы C/C++ 5 03.07.2009 14:22
[C] массивы, указатели, двойные указатели. Iggel Общие вопросы C/C++ 5 05.05.2009 12:39