Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Хостинг Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг на Windows 2008

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 1131
от 13.10.2008, 09:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 419, Экспертов: 41
В номере:Вопросов: 3, Ответов: 5

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>


Вопрос № 146364: Привет всем! Подскажите плиз как сделать чтобы у статической переменной адрес (в виртуальной памяти) был кратен 16? Спасибо за ответы....
Вопрос № 146366: Ещё раз здравствуйте уважаемые эксперты. Я вчера вам уже задавал вопрос под номером 146208. Я благодарен вам за оказанную ранее помощь. Условие задачи полностью аналогично. Но у меня возникла проблема другого рода. <br...
Вопрос № 146373: Здравствуй realbustard!!! Спасибо за программы! Все просто ок! Подскажи пожалуйста я правильно делаю или нет? Рекурсия. Вычислить значение функции с помощью рекурсивной формулы y=45+sinx+ sin2x+sin3x+...sin15x; x=2,76...

Вопрос № 146.364
Привет всем!
Подскажите плиз как сделать чтобы у статической переменной
адрес (в виртуальной памяти) был кратен 16?
Спасибо за ответы.
Отправлен: 07.10.2008, 18:07
Вопрос задал: kool (статус: Практикант)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 7)

Отвечает: Хватов Сергей
Здравствуйте, kool!

Стандартом не оговорено, и в каждом компиляторе по-разному.

Я знаю (не помню для кого)
#pragma pack(16)
int var;
#pragmа pack() // без этого режим останется даже после конца include-файла, что приведёт к тяжёлым последствиям
для gcc:
int var __attribute__ ((aligned (16)));
Ответ отправил: Хватов Сергей (статус: Практикант)
Ответ отправлен: 07.10.2008, 18:29
Оценка за ответ: 4
Комментарий оценки:
Для Виндовос у var адрес не кратен 16.
Проверка простая - int *i=&var;

Отвечает: Sk0rp
Здравствуйте, kool!
Можно еще Microsoft Specific для VC++ использовать (непортабельно)

typedef __declspec(align(32)) struct { int a; double b; } S;
int n = 50; // array size
S* p = (S*)aligned_malloc(n * sizeof(S), __alignof(S));

Ответ отправил: Sk0rp (статус: 6-ой класс)
Ответ отправлен: 07.10.2008, 18:48
Оценка за ответ: 4
Комментарий оценки:
вместо такого огорода можно воспользоваться
динамической памятью, тем более не удалось проверить его работоспособность и найти описание
aligned_malloc и __alignof. Большие сомнения что эта конструкция будет работать как надо?


Вопрос № 146.366
Ещё раз здравствуйте уважаемые эксперты.

Я вчера вам уже задавал вопрос под номером 146208.

Я благодарен вам за оказанную ранее помощь.

Условие задачи полностью аналогично.

Но у меня возникла проблема другого рода.

А именно:

Теперь мне нужно создать условия с помощью оператора if, которое бы позволяло вывести сообщение об ошибке, с подробной информацией о ней и завершить работу программы в том случае если список не был создан пользователем.
И как избавиться от не понятных цифр. Допустим если выбрать 3 пункт программы.

То есть если даже мы не создали список на экран выводится какие то непонятные вещественные числа.

Откуда они беруться и как сделать так чтобы они не выводились на экран в том случае если список пуст или его элементы равны 0.

Заранее спасибо.

Приложение:

Отправлен: 07.10.2008, 18:14
Вопрос задал: Орлов Михаил Степанович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Sk0rp
Здравствуйте, Орлов Михаил Степанович!
Во первых стоит все-таки прописать конструктор по умолчанию для struct ilist как показано ниже
struct ilist
{
ilist() : next(0) {}
float num;
ilist *next;
};

это полезно, что бы не было объектов с ведущими в никуда указателями.
а проверка на пустой список у вас тривиальна, нужно проверять на ноль указатель на голову. см приложение.

Приложение:

Ответ отправил: Sk0rp (статус: 6-ой класс)
Ответ отправлен: 07.10.2008, 19:11
Оценка за ответ: 5
Комментарий оценки:
Ваш ответ выше всяких похвал. Вы просто гений. Спасибо за помощь. Я очень рад что вы мне помогли. Вы даже не представляете сколь была необходима мне ваша помощь.


Вопрос № 146.373
Здравствуй realbustard!!!
Спасибо за программы! Все просто ок!
Подскажи пожалуйста я правильно делаю или нет?

Рекурсия. Вычислить значение функции с помощью рекурсивной формулы

y=45+sinx+ sin2x+sin3x+...sin15x; x=2,76

Приложение:

Отправлен: 07.10.2008, 19:09
Вопрос задал: Shah-ilya (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Виктор Пырлик
Здравствуйте, Shah-ilya!

"Рекурсия" - это когда вызывает функция сама себя..
например
код на С
Код:
/*рекурсивная функция*/
#include <stdio.h>
#include <math.h>

double f(int i, double x)
{
static double y = 0;
if(i == 0) return y;
y += sin(i*x);
return f((i-1),x);

}
/* главная функция*/
int main(int argc, char** argv)
{
int i = 0;
double y = 0,x = 0;
printf(" Введите i: ");
scanf("%i",&i);
printf(" Введите x: ");
scanf("%lf",&x);
y = f(i,x)+45;
printf(" Результат: y(%.2lf) = %.3lf при i = %i ",x,y,i);
return 0;
}

а вот на языке С++
Код:
#include <iostream>
#include <math.h>
using namespace std;
// Рекурсия. Вычислить значение функции с помощью рекурсивной формулы
// y=45+sinx+ sin2x+sin3x+...sin15x; x=2,76
double f(int i, double x)
{
static double y = 0;
if(i == 0) return y;
y += sin(i*x);
return f((i-1),x);

}
//главная функция
int main(int argc, char** argv)
{
int i = 0;
double y = 0,x = 0;
cout << "Введите i: "; cin >> i;
cout << "Введите x: "; cin >> x;
y = f(i,x)+45;
cout << endl <<"Результат: y(" << x <<") = & quot; << y << " при i = "<< i<< endl;
return 0;
}

---------
не получается там - где не пробуют
Ответ отправил: Виктор Пырлик (статус: Профессионал)
Россия, Екатеринбург
Тел.: 89043822027
ICQ: 490191733
----
Ответ отправлен: 07.10.2008, 20:18
Оценка за ответ: 5
Комментарий оценки:
Спасибо большое, Виктор. Радует что на этом сайте действительно помогают, в отличии от других сайтов. Спасибо!

Отвечает: realbustard
Здравствуйте, Shah-ilya!
Ваше решение верно, только вы используюте не рекурсивную ф-ю, а итеративный метод, т.е. используюте цикл.
Рекурсивная ф-я - это ф-я, которая вызывает сама себя. В данной задаче это выглядит так:
f(i-1,x)+sin(i*x).
Происходит подсчет значения при i==15 , а потом ф-я вызывает себя при i=(i-1) , т.е. 14 и так до 1.

Вообще рекурсивные ф-ии опасны и кроме того, требуют много памяти и по-возможности их желательно не применять.
Удачи на сессии!!!

Приложение:

---------
Учись так, как-будто собираешься жить вечно; живи так, как-будто завтра умрешь (Отто фон Бисмарк)

Ответ отправил: realbustard (статус: 4-ый класс)
Ответ отправлен: 07.10.2008, 20:46
Оценка за ответ: 5
Комментарий оценки:
Спасибо большое realbustard! Как раз таки удача на сессии и понадобится. Если я не ошибаюсь Вам повысили статус?! Так держать! Хорошо что есть такие люди как Вы!


Вы имеете возможность оценить этот выпуск рассылки.
Нам очень важно Ваше мнение!
Оценить этот выпуск рассылки >>

Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2008, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале

∙ Версия системы: 5.5 от 09.10.2008

Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное