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

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


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

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

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

Micren
Статус: Практикант
Рейтинг: 101
∙ повысить рейтинг >>
Hubbitus
Статус: 10-й класс
Рейтинг: 93
∙ повысить рейтинг >>
witek25
Статус: 3-й класс
Рейтинг: 40
∙ повысить рейтинг >>

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

Выпуск № 1289
от 20.04.2009, 21:05

Администратор:Dr_Andrew
В рассылке:Подписчиков: 511, Экспертов: 37
В номере:Вопросов: 5, Ответов: 6

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

Вопрос № 164970: Доброго времени суток Уважаемые эксперты языка программирования С++. Помогите пожалуйста с решением задач, в долгу не останусь, очень нужно решить эти задачи до 15 апреля 2009 г. до 10. 00 по Москве. По истечении этого времени просьбу проигнорировать...


Вопрос № 165036: Не могли бы вы помочь сделать лабораторную работу? Задание: Разработать класс Vector – геометрический вектор произвольной размерности (размерность задается в конструкторе вектора). Реализовать метод доступа к элементам вектора. Реализовать опер...
Вопрос № 165042: Здравствуйте! Есть такой вопрос, мне нужно заполнить массив B значениями элементов массива A, исключив из него повторяющиеся элементы. Освободившиеся ячейки заполнить максимальным элементом массива A. Можете мне написать код программы с объяснением. ...
Вопрос № 165044: Уваж аемые эксперты, помогите найти решение: написать программу с помощью итерационного метода для последовательности <b>a(1)=1; a(n)=n-a(a(n-1)) n>1</b> с помощью рекурсии все получается int posled(int n) { int a; if...
Вопрос № 165059: И снова здравствуйте! <b>Уважаемые эксперты!</b> Помогите решить задачи такого плана: 1. Дан массив из десяти целых чисел (заполненный разными значениями по Вашему усмотрению). Если в нем больше положительных чем отрицательных значений, то о...

Вопрос № 164.970
Доброго времени суток Уважаемые эксперты языка программирования С++. Помогите пожалуйста с решением задач, в долгу не останусь, очень нужно решить эти задачи до 15 апреля 2009 г. до 10. 00 по Москве. По истечении этого времени просьбу проигнорировать. Сами задачи: в одномерном массиве, состоящем из n целых элементов, вычислить: 1) номер максимального элемента массива; 2) произведение элементов массива, расположенных между первым и вторым нулевыми элементами.
Вторая задача: преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоящие в нечетных позициях, а во второй половине - элементы, стоящие в четных позициях. Исходный код пожалуйста с коментариями. Код ко второй задачи в приложении. Заранее блогадарен всем, кто ответит.

Приложение:

Отправлен: 14.04.2009, 20:59
Вопрос задал: Иванов Анатолий Николаевич (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Терсков Сергей
Здравствуйте, Иванов Анатолий Николаевич!
Решение ваших задач смотрите в коде. Ход решения можно понять из комментариев. Компилятор MS VS 2005.
Код:
#include <time.h>
#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[]) {

//Русский язык для консоли
setlocale(LC_ALL,"russian_russia");

//Размер массива
const int size = 20;
//Задание массива
int A[size];

//Переменнные для циклов
int i, j;

//Границы значений элементов массива
int rand_min = -10;
int rand_max = 10;

//Инициализация ГСЧ
srand((unsigned) time(NULL));

//Заполнение массива случайными элементами из диапазона (rand_min; rand_max)
for(i=0; i<size; i++)
A[i] = rand()%(rand_max - rand_min) + rand_min;

//Вывод исходного массива
cout << "Исходный массив:" << endl;

for(i=0; i<size; i++)
cout << A[i] << " ";

//Задача №1

cout << endl << endl << "Задача №1." << endl;

//Индекс максимального элемента в массиве
int max_index = 0;
//Проход по массиву
for(i=1; i<size; i++)
//Если элемент больше текущего максимального
if(A[i] > A[max_index])
//Обновляем индекс маскимального элемента
max_index = i;

//Вывод максимального элемента массива
cout << "Максимальный элемент массива: " << "A[" << max_index << "] = " << A[max_index] << endl;

//Задача №2

cout << endl << "Задача №2." << endl;

//Индексы первого и второго ну левого элемента
int n1 = -1;
int n2 = -1;

//Нахождение первого нулевого элемента
for(i=0; i<size; i++) {

if(A[i] == 0) {
n1 = i;
break;
}
}

//Нахождение следующего за первым нулевого элемента
for(i=n1+1; i<size; i++) {

if(A[i] == 0) {
n2 = i;
break;
}
}

//Если нулевой элемент один или их нет вообще
if(n1 == -1 || n2 == -1) {
cout << "Массив не содержит двух нулевых элементов" << endl;
}
//Если между элементами нет значений (соседние элементы)
else if(n2 == n1+1) {
cout << "Между нулевыми элементами нет элементов" << endl;
}
else {

//Переменная для произведения
int prod = 1;

//Умножение элементов между нулевыми
for(i=n1+1; i<n2; i++)
prod *= A[i];

//Вывод произведения
cout << "Произведение элементов между нулевыми элементами: &quo t; << prod << endl;
}

//Задача №3
cout << endl << "Задача №3." << endl;

//Массив для формирования перестановки
int B[size];

//Запись в массив B нечетных элементов
for(i=1, j=0; i<size; i+=2, j++)
B[j] = A[i];

//Запись в массив B четных элементов
for(i=0; i<size; i+=2, j++)
B[j] = A[i];

//Вывод модифицированного массива
cout << "Модифицированый массив:" << endl;

for(int i=0; i<size; i++)
cout << B[i] << " ";

return 0;
}
Ответ отправил: Терсков Сергей (статус: Специалист)
Ответ отправлен: 15.04.2009, 03:26

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

    Оценка за ответ: 5
    Комментарий оценки:
    Отлично! Пять плюсов+++++! Разобрался, все работает, у меня просто глючил компилятор.


    Вопрос № 165.036
    Не могли бы вы помочь сделать лабораторную работу?
    Задание:
    Разработать класс Vector – геометрический вектор произвольной размерности (размерность задается в конструкторе вектора). Реализовать метод доступа к элементам вектора. Реализовать операции сложения, вычитания и скалярного произведения векторов, а также нахождение модуля вектора. в среде visual studio 2005 (c++).

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

    Отвечает: Micren
    Здравствуйте, Шамиль Виссарионович Кутузовин!
    Программа:
    Код:

    #include <locale>
    #include <iostream>
    #include <vector>
    #include <valarray>

    using namespace std;

    class VectorException
    {
    public:
    VectorException(wstring msg=L"Неизвестное исключение");
    virtual const wchar_t* what() const;
    private:
    wstring _msg;
    };

    class Vector
    {

    public:
    // Конструктор
    explicit Vector(unsigned int dimension);
    // Индексатор для доступа к требуемой координате
    inline double& operator[](unsigned int index);
    // Оператор сложения
    Vector operator+(Vector& v) const;
    // Оператор вычитания
    Vector operator-(Vector& v) const;
    // Скалярное произведение< br> double operator*(Vector& v) const;
    // Модуль вектора
    double mod(void);
    private:
    vector<double> coords;
    friend wostream& operator<<(wostream& stream,const Vector& v);
    };

    int main()
    {
    locale::global(locale("russian_russia.866"));
    wcout<<L"Программа для тестирования базовых функций класса"<<endl;
    Vector A(3),B(3);
    A[0]=1;
    A[1]=2;
    A[2]=3;
    wcout<<L"A="<<A<<endl;
    B[0]=3;
    B[1]=0;
    B[2]=-3;
    wcout<<L"B="<<B<<endl;
    wcout<<L"A+B="<<A+B<<endl;
    wcout<<L"A-B="<<A-B<<endl;
    wcout<<L"A*B="<<A*B<<endl;
    wcout<<L"|A|="<<A.mod()<<endl;
    system("PAUSE");
    return 0;
    }

    VectorException::VectorException( wstring msg/*=L"Неизвестное исключение"*/ )
    :_msg(msg)
    {}
    const wchar_t* VectorException::what() const
    {
    return _msg.c_str();
    }

    // Конструктор
    Vector::Vector(unsigned int dimension)
    {
    coords.resize(dimension,0);
    }
    // Индексатор для доступа к требуемой координате
    double& Vector::operator[](unsigned int index)
    {
    return coords[index];
    }
    // Оператор сложения
    Vector Vector::operator+(Vector& v) const
    {
    if(coords.size()!=v.coords.size())throw VectorException(L"Vector::operator+:Размерности векторов не совпадают");
    unsigned int dim=coords.size();
    Vector res(dim);
    for(unsigned int i=0;i<dim;++i)
    {
    res.coords[i]=coords[i]+v.coords[i];
    }
    return res;
    }
    // Оператор вычитания
    Vector Vector::operator-(Vector& v) const
    {
    if(coords.size()!=v.coords.size())throw VectorException(L"Vector::operator-:Размерности векторов не совпадают");
    unsigned int dim=coords.size();
    Vector res(dim);
    for(unsigned int i=0;i <dim;++i)
    {
    res.coords[i]=coords[i]-v.coords[i];
    }
    return res;
    }
    // Скалярное произведение
    double Vector::operator*(Vector& v) const
    {
    if(coords.size()!=v.coords.size())throw VectorException(L"Vector::operator*:Размерности векторов не совпадают");
    double res=0;
    for(unsigned int i=0;i<coords.size();++i)
    {
    res+=coords[i]*v.coords[i];
    }
    return res;
    }
    // Модуль вектора
    double Vector::mod(void)
    {
    double sqr=0;
    for(vector<double>::const_iterator it=coords.begin();it!=coords.end();++it)
    {
    sqr+=*it**it;
    }
    return sqrt(sqr);
    }
    // Оператор вывода
    wostream& operator<<(wostream& stream,const Vector& v)
    {
    stream<<L'(';
    vector<double>::const_iterator it=v.coords.begin();
    while(true)
    {
    stream<<*it;
    if(++it==v.coords.end())break;
    else stream<<L',';
    }
    stream<<L')';
    return stream;
    }

    Тестировалась в MS VS 2008.
    Пример работы:
    Код:

    Программа для тестирования базовых функций класса
    A=(1,2,3)
    B=(3,0,-3)
    A+B=(4,2,0)
    A-B=(-2,2,6)
    A*B=-6
    |A|=3.74166
    Ответ отправил: Micren (статус: Практикант)
    Ответ отправлен: 17.04.2009, 17:05

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


    Вопрос № 165.042
    Здравствуйте! Есть такой вопрос, мне нужно заполнить массив B значениями элементов массива A, исключив из него повторяющиеся элементы. Освободившиеся ячейки заполнить максимальным элементом массива A. Можете мне написать код программы с объяснением. Заранее благодарен.

    Приложение:

    Отправлен: 15.04.2009, 15:10
    Вопрос задал: Madvik (статус: Посетитель)
    Всего ответов: 1
    Мини-форум вопроса >>> (сообщений: 4)

    Отвечает: Ilkras
    Здравствуйте, Madvik!
    предположим у вас есть массив int arr1[10] длиной десять элементов. заполним массив int arr2[10].
    будем по-одному переписывать элементы из первого массива во второй и перед записью проверять, что такого элемента еще нет, если же такой элемент найдется, то будем пропускать его. после того как мы закончим проход по первому массиву дополним второй массив.
    int i,i2,j, max;
    for(i=0, i2=0, max = 0; i<10; i++)
    {
    if(arr1[i] > max)
    max = arr1[i]; //ищем максимальную величину
    for(j=0;j<i2; j++)
    {
    if(arr2[j] == arr1[i])
    break; //выйти из вложенного цикла и вернуться во внешний
    }
    if(i2 == j) //если мы прошли вложенный цикл до конца, то они равны
    arr2[i2++] = arr1[i]; //записать элемент во второй массив и инкрементироват ь его индекс; обратите внимание, что индекс i2 растет не на каждой итеракции цикла, а только на записях во второй массив
    }
    //теперь у нас второй массив заполнен неповторяющимися элементами первого. дополним его максимальными значениями
    for(i=i2; i<10; i++)
    arr2[i] = max;
    Ответ отправил: Ilkras (статус: Студент)
    Ответ отправлен: 15.04.2009, 16:14

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


    Вопрос № 165.044
    Уважаемые эксперты, помогите найти решение:
    написать программу с помощью итерационного метода для последовательности
    a(1)=1;
    a(n)=n-a(a(n-1)) n>1


    с помощью рекурсии все получается
    int posled(int n)
    {
    int a;
    if (n>1)
    a=n-posled(posled(n-1));
    else a=1;
    return a;
    }

    и еще один вопрос а как показывать глубину рекурсии или кол-во итераций?
    Большое спасибо
    Отправлен: 15.04.2009, 15:37
    Вопрос задал: Булат Ахатов Фаукатович (статус: Посетитель)
    Всего ответов: 1
    Мини-форум вопроса >>> (сообщений: 0)

    Отвечает: Piter
    Здравствуйте, Булат Ахатов Фаукатович!

    Ничего, кроме как "в лоб" на ум не приходит

    int a(int n)
    {
    int x;
    int* buf;

    buf = maloc(n * sizeof(int));
    if (buf == null)
    return 0;
    buf[0] = 1;

    for(x = 1; x < n;x++)
    buf[x] = x - buf[buf[x-1]];

    x = buf[n - 1];
    free(buf);

    return x;
    }

    Может где синтаксис подкачал... как назло нет под рукой ни одного компилятора. Но смысл я думаю ясен...
    Ответ отправил: Piter (статус: 2-й класс)
    Ответ отправлен: 16.04.2009, 16:03

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


    Вопрос № 165.059
    И снова здравствуйте!
    Уважаемые эксперты!
    Помогите решить задачи такого плана:
    1. Дан массив из десяти целых чисел (заполненный разными значениями по Вашему усмотрению). Если в нем больше положительных чем отрицательных значений, то отсортировать его по возрастанию значений элементов, иначе - отсортировать по убыванию. Например, если массив содержит [0,-11,4,3,14,8,6,-7,-4,9], то он должен преобразоваться в [-11,-7,-4,0,3,4,6,8,9,14].

    2.Дан массив из десяти целых чисел (заполненный разными значениями по Вашему усмотрению). Сформировать второй массив (динамический), в который отобрать из первого все числа, делящиеся на 3. Например, если первый массив содержит [8,2,1,3,12,7,6,5,4,9], то создаваемый массив должен содержать [3,12,6,9].

    СПАСИБО! Надеюсь на вашу помощь!
    Отправлен: 15.04.2009, 18:18
    Вопрос задала: Озерова Елена Сергеевна (статус: Посетитель)
    Всего ответов: 2
    Мини-форум вопроса >>> (сообщений: 0)

    Отвечает: Ilkras
    Здравствуйте, Озерова Елена Сергеевна!
    по первому вопросу так:
    сначала ищем сколько положительных и сколько отрицательных величин в массиве. потом вызываем библиотечную функцию быстрой сортировки.
    Надеюсь все понятно, если нет, то пишите в минифоруме.

    Приложение:

    Ответ отправил: Ilkras (статус: Студент)
    Ответ отправлен: 15.04.2009, 19:50

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

    Оценка за ответ: 5
    Комментарий оценки:
    Отлично! Абсолютно то,что хотелось видеть!
    Скомпилировав проект,получилось всё нормально. Я очень рада ответом
    Огромное вам СПАСИБО!!!


    Отвечает: Гречкин Андрей Анатольевич
    Здравствуйте, Озерова Елена Сергеевна!

    Решение 2.

    Перенесена программа в приложение. Использование ВВС-кодов.
    --------
    ∙ Отредактировал: Зенченко Константин Николаевич, Профессор
    ∙ Дата редактирования: 16.04.2009, 12:31 (время московское)

    Приложение:

    Ответ отправил: Гречкин Андрей Анатольевич (статус: 2-й класс)
    Ответ отправлен: 16.04.2009, 05:12

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 247608 на номер 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

    В избранное