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

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


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

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

Чемпионы рейтинга экспертов в этой рассылке

Лысков Игорь Витальевич
Статус: Профессионал
Рейтинг: 165
∙ повысить рейтинг >>
Micren
Статус: Студент
Рейтинг: 112
∙ повысить рейтинг >>
Person
Статус: 3-й класс
Рейтинг: 78
∙ повысить рейтинг >>

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

Выпуск № 1258
от 06.03.2009, 00:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 495, Экспертов: 53
В номере:Вопросов: 2, Ответов: 4

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

Вопрос № 161600: Здравствуйте эксперты, подскажите как можно сделать следующее: пишу в codeblocks записал в переменную типа INT число и хочу каждый его бит считать в переменную типа CHAR Через указатели не смог сделать, если указатель сделать на тип INT то е...


Вопрос № 161642: Уважаемые эксперты помогите с следующими задачами: 1) Удвоить в тексте каждую литеру. Текст находится в текстовом файле. 2) Вычислить значение функции в заданной точке x. 3) Определить, есть ли среди цифр заданного n - значного целого числа ...

Вопрос № 161.600
Здравствуйте эксперты, подскажите как можно сделать следующее:
пишу в codeblocks
записал в переменную типа INT число и хочу каждый его бит считать в переменную типа CHAR
Через указатели не смог сделать, если указатель сделать на тип INT то если к адресу добавлять единицу то к адресу добавиться 4 байта, пробовал присвоить адрес переменной типа INT в указатель на CHAR так ошибка получается, не дает компилятор.
Как можно сделать это? вообще как можно независимо от типа получиться адрес чего-либо как просто обычное число, и обычное число превратить в адрес и работать с этим адресом?
Отправлен: 28.02.2009, 11:14
Вопрос задал: Tribak (статус: Студент)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 5)

Отвечает: Micren
Здравствуйте, Tribak!
В таких случаях необходимо выполнять операцию явного приведения:
Код:

#include <iostream>

using namespace std;

int main()
{
int number=0x12345678;
char *chArr=(char*)&number;
for(unsigned i=0;i<4;i++)
{
cout<<"offset="<<i<<" value="<<hex<<(int)chArr[i]<<endl;
}
system("PAUSE");
return 0;
}

Результат работы:
Код:

offset=0 value=78
offset=1 value=56
offset=2 value=34
offset=3 value=12
Ответ отправил: Micren (статус: Студент)
Ответ отправлен: 28.02.2009, 11:28

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 244685 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!

    Оценка за ответ: 5


    Отвечает: Petya-kurochkin
    Здравствуйте, Tribak!
    Вот еще как можно получить значения ВСЕХ битов какого-либо типа. Делается это с помощью объединений и полей.
    Код снабжён комментариями, мало того, я его оттестил в Code::Blocks, наслаждайтесь.

    Приложение:

    ---------
    За здоровый фанатизм!

    Ответ отправил: Petya-kurochkin (статус: 5-й класс)
    Ответ отправлен: 28.02.2009, 11:42

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 244688 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!

    Оценка за ответ: 5


    Вопрос № 161.642
    Уважаемые эксперты помогите с следующими задачами:
    1) Удвоить в тексте каждую литеру. Текст находится в текстовом файле.
    2) Вычислить значение функции в заданной точке x.
    3) Определить, есть ли среди цифр заданного n - значного целого числа одинаковые цифры.
    4) Найти сумму четных чисел в интервале от m до n. Числа m и n задаются при вводе.
    Заранее благодарен.
    Отправлен: 28.02.2009, 22:05
    Вопрос задал: Xz1991xz
    Всего ответов: 2
    Мини-форум вопроса >>> (сообщений: 2)

    Отвечает: Абельхарисов Руслан/Marked One
    Здравствуйте, Xz1991xz!
    Код к четвертой задаче:
    Код:
    //Проверялся в Microsoft Visual C++ 2008 Express Edition 
    #include "stdafx.h"
    #include "iostream"

    using namespace std;

    int _tmain(int argc, _TCHAR* argv[])
    {
    //Переменные m и n
    int m, n;
    //Получаем m и n
    cout << "m, n: ";
    cin >> m >> n;
    //Сумма
    int sum = 0;
    //цикл в котором перебираем все в интервале (m; n)
    for (int i = m + 1; i < n; i++)
    {
    //Если остаток от деления числа на 2 равен 0, то число четное и прибавляем его к сумме
    if (i % 2 == 0)
    {
    sum += i;
    }
    }
    //выводим результат
    cout << "result: " << sum <& lt; endl;
    system("PAUSE");
    return 0;
    }

    Удачи!!!
    ---------
    Нам не дано предугадать, как слово наше отзовется (C) Тютчев
    Ответ отправил: Абельхарисов Руслан/Marked One (статус: Практикант)
    Ответ отправлен: 01.03.2009, 13:46

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 244751 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Отвечает: Hromovnik046
    Это исправленная версия моей программы для вашего задания №3: "Определить, есть ли среди цифр заданного n - значного целого числа одинаковые цифры."
    Вот код программы:

    //---------------------------------------------------------------------------

    #include <vcl.h>
    #include <iostream.h>
    #pragma hdrstop
    #pragma argsused

    //---------------------------------------------------------------------------

    // Формирование делителя для выборки отдельных цифр числа
    int set (int set_i, int count)
    {
    int result = 1, difference = (count - set_i);
    for (int i = 1; i <= difference; ++i)
    result *= 10;

    return result;
    } // set

    //---------------------------------------------------------------------------

    // Сравнение двух цифр
    bool comp (int f_digit, int s_digit)
    {
    bool r;
    if (f_digit != s_digit)
    return r;
    else return !r;
    } //comp

    //---------------------------------------- -----------------------------------

    int main(int argc, char* argv[])
    {
    int number, ver, check = 0, counter,
    first_digit, second_digit;
    bool res;

    cout << "Vvedite simvol EOF po okon4aniu vvoda. " <<
    "Chislo ne mojet na4inat`sya s "0". " << "Vvedite chislo: ";
    cin >> number;

    while ((ver = cin.get()) != EOF) // Программа завершается, когда
    // пользователь жмёт Ctrl+Z
    {
    res = false; // Одинаковых цифр нет
    counter = 1;
    check = number / 10;

    while (check != 0) // Нахождение кол-ва цифр в числе
    {
    check /= 10;
    counter++;
    }

    while (counter != 1)
    {
    if (res == true) break;
    for(int j = 1, k; j < counter; ++j)
    {
    first_digit = number / set(j, counter) % (k = 10);
    second_digit = number % set(counter - 1, counter);
    res = comp(first_digit, second_digit);
    if (res == true)
    {
    cout << "Chislo imeet odinakovble cifrbl. ";
    break;
    }
    }
    number /= 10; // Уменьшение числа на одну цифру с конца
    check = number / 10;
    counter = 1;
    while (check != 0) // Пересчёт кол-ва цифр получившегося числа
    {
    check /= 10;
    counter++;
    }
    }
    if (res == false) cout << "Chislo ne imeet odinakovblh cifr. ";
    cout << "Vvedite chislo: ";
    cin >> number;
    }
    return 0;
    }
    //---------------------------------------------------------------------------

    ЗЫ: эту прогу можно сделать и через массивы и через строки и ещё бог знает как, что гораздо легче. Но так как вы не сказали, как именно решать эту задачу, то я предпочёл сделать её с помощью самых начальных знаний и наиболее близко к аналогичному решению в математике или комбинаторике.

    Исправления внесены по просьбе автора ответа
    --------
    ∙ Отредактировал: Shapoklak, Академик
    ∙ Дата редактирования: 04.03.2009, 11:15 (время московское)
    Ответ отправил: Hromovnik046 (статус: 3-й класс)
    Ответ отправлен: 01.03.2009, 19:29

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 244779 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


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

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

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

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

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

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


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

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров >>

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


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

    ∙ Версия системы: 5.13 от 01.12.2008

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

    В избранное