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

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


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

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

Выпуск № 754
от 30.05.2007, 03:35

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


Вопрос № 88360: Ищу книги Архангельского А.Я. Справочное руководство C++ Builder 6 Книга1 и Книга2. E-mail: ait1@stavre.elektra.ru. C Уважением, Князев А.Н....
Вопрос № 88420: Здраствуйте, уважаемые эксперты! Мне надо было решить 10 задач по программированию. 8 я решил, а две не могу. Помогите пожалуйста решить 2 задачи. Очень надо. Желательно сегодня. Очень жалательно. Вот тексты заданий: вычислите значения м...
Вопрос № 88435: Здравствуйте! Подскажите пожалуйста принцип работы с функцией с неограниченным количеством параметров. Например ф-я, что в приложении: мой способ получения след указателя не подходит - поправьте пожалуйста. Спасибо...

Вопрос № 88.360
Ищу книги Архангельского А.Я. Справочное руководство C++ Builder 6
Книга1 и Книга2. E-mail: ait1@stavre.elektra.ru. C Уважением, Князев А.Н.
Отправлен: 24.05.2007, 09:47
Вопрос задал: Князев Александр Николаевич (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Терсков Сергей
Здравствуйте, Князев Александр Николаевич!
Если скачать, то посмотрите здесь (формат djvu)

http://books-for-programmer.nnm.ru/programmirovanie_v_c_builder_6

А в бумажном варианте купить ее можно на books.ru или ozon.ru
Ответ отправил: Терсков Сергей (статус: 10-ый класс)
Ответ отправлен: 24.05.2007, 10:25
Оценка за ответ: 4
Комментарий оценки:
Рекомендуемая Терсковым Сергееммне пригодилась.Но нужно ,именно,Справочное
руководство.


Вопрос № 88.420
Здраствуйте, уважаемые эксперты!
Мне надо было решить 10 задач по программированию. 8 я решил, а две не могу. Помогите пожалуйста решить 2 задачи. Очень надо. Желательно сегодня. Очень жалательно. Вот тексты заданий:

вычислите значения многочленов
P= a[n]*x^n + a[n-1]*x^(n-1) + ... + a[1]*x + a[0],
Q= a[0]*x^n + a[1]*x[n-1] + ... + a[n-1]*x + a[0], используя формулу Горнера. Коэффициенты многочленов заданы в виде вектора A = {a[0],a[1],...,a[n]}.
========================
И вторая
Дана матрица A[N][M]. Получите Y = X[1]*X[N] + X[2]*X[N-1] + ... + X[N]*X[1], где X[i] - наибольший элемент в строке с номером i матрицы A
Хотя бы объясните мне смысл второй задачи. Я его вообще не понял(
Помогите пожалуйста.
Отправлен: 24.05.2007, 16:49
Вопрос задал: Scart (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: kool
Здравствуйте, Scart!
Что касается второго вопроса, то там все просто -
найти наибольший из элементов в каждой из строк матрицы,
получим N элементов (поскольку у матрицы всего N строк),
X[i]- максимальный элемент i-ой строки матрицы.
Ну а потом считаем сумму по формуле: сумм.(X[i]*X[N-i+1]);i=1,...,N.
Удачи!

---------
I am.
Ответ отправил: kool (статус: Студент)
Ответ отправлен: 24.05.2007, 20:21
Оценка за ответ: 5
Комментарий оценки:
Да, спасибо, разобрался со второй задачей.


Вопрос № 88.435
Здравствуйте!
Подскажите пожалуйста принцип работы с функцией с неограниченным количеством параметров.
Например ф-я, что в приложении: мой способ получения след указателя не подходит - поправьте пожалуйста.

Спасибо

Приложение:

Отправлен: 24.05.2007, 19:27
Вопрос задал: Наумов Сергей Александрович / snov (статус: 1-ый класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Виктор Пырлик
Здравствуйте, Наумов Сергей Александрович / snov!
можно вот так...

Приложение:

---------
Надо пребывать господа, пребывать! Иначе ничего не получится!

Ответ отправил: Виктор Пырлик (статус: 3-ий класс)
Ответ отправлен: 24.05.2007, 20:16
Оценка за ответ: 4
Комментарий оценки:
я не исключаю такой вариант, но я просил помочь с моей ошибкой "double* next_per = per + 4;", а не кардинально другой вариант, но все равно спасибо

Отвечает: John Paramol
Здравствуйте, Наумов Сергей Александрович / snov!
Принцип работы функции с неограниченным количеством параметров заключается в последовательном обращении к содержимому стека.
Попытаюсь объяснить подробно.
Такие функции имеют тип вызова __cdecl (его можно явно не указывать). Это означает, что параметры должны передаваться в функцию через стек, справа налево, причем количество параметров может быть не фиксировано.
Функция может получить доступ ко всем незаданным параметрам, через указатель на последний заданный параметр. Так как параметры хранятся в стеке последовательно, то, чтобы получить указатель, например, на следующий за последним параметр, нужно считать следующие 8 байтов (для типа double) за ним. Т.о. выражение &per+1 будет указывать на следующее 8-байтное вещественное значение. Или на другое, например, целое значение, если мы будем вызывать функцию к примеру так: Func(1,1.5,(int)5);
В приложении рабочий пример.
Для того, чтобы Вы лучше разобрались в этом, рассмотрим принцип работы стандартной ф-ии printf. Не вдаваясь в подробности, лишь основной принцип.
Первый параметр задан, как указатель на строку. Ф-ия сканирует эту строку посимвольно до символа конца строки. Если встречается символ '%', а за ним стоит один из определенных создателями ф-ии символов подстановки, например 'f', то функция берет из стека следующие за первым параметром 4 байта, переводит в текст, считая, что в них содержится вещественное число одинарной точности и подставляет на место этих символов. Если далее встречается, например, символ '%' и 'd', то ф-ия берет уже за этими 4 байтами следующие 4 байта и преобразует в текст в десятиричном виде, считая что в них содержится целое число. И так далее.
Думаю, принцип ясен.
Удачи.

Приложение:

---------
1=2, at values 1 large enough

Ответ отправил: John Paramol (статус: 8-ой класс)
Ответ отправлен: 24.05.2007, 20:22
Оценка за ответ: 5
Комментарий оценки:
Огромное спасибо!
то что нужно

Отвечает: Ilkras
Здравствуйте, Наумов Сергей Александрович / snov!
точно! не подходит.
вы взяли переменную и манипулируете ей.
вместо этого надо взять адрес этой переменной - параметр, размещен в стеке и манипулировать им. при этом надо помнить, что стек "растет вниз".
таким образом берем указатель на параметр per - это адрес параметра. вычитаем 4 байта и получаем адрес следующего параметра и т.д.
это принцип, а работать лучше со стандартной библиотекой. можно посмотреть реализацию функции printf. ниже приведен пример из MSDN.
va_list - это char *
va_start - присваивает первому аргументу адрес второго
va_arg - продвигает пойнтер (первый аргумент) на длину второго аргумента.

что важно помнить:
1) надо иметь способ определить количество параметров функции, поскольку некакой метки конца списка параметров нет
2) надо знать типы параметров, чтобы правильно находить следующие параметры

еще раз советую почитать текст функции printf, заодно поймете как опасно ей пользоваться :) ее можно найти в инсталяции Visual Studio crtsrcprintf.c или в интернете.
удачи

Приложение:

Ответ отправил: Ilkras (статус: 10-ый класс)
Ответ отправлен: 25.05.2007, 01:18


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

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

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

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

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


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


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.52 от 02.05.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное