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

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


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

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

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

Hubbitus
Статус: 6-й класс
Рейтинг: 89
∙ повысить рейтинг >>
Micren
Статус: Студент
Рейтинг: 84
∙ повысить рейтинг >>
Лысков Игорь Витальевич
Статус: Профессионал
Рейтинг: 54
∙ повысить рейтинг >>

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

Выпуск № 1267
от 26.03.2009, 17:05

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

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

Вопрос № 162838: Здравствуйте,Помогите,пожалуйста.Требуется на языке C++ определить координаты первого и последнего вхождения в заданную строку заданного символа. Заранее спасибо!...


Вопрос № 162850: Доброго времени суток уважаемые эксперты <img src="http://rusfaq.ru/images/Forum/5.gif" border="0"> Помогите пожалуйста с решением задачи - задана последовательность из N вещественных чисел. Вычислить порядковый номер числа наиболее приближенного к...
Вопрос № 162862: Здравствуйте,у меня есть готовая программа релизующая стек и реализован поиск, она запускается, но не работают процедуры,можете указать на ошибку?Только пожалуйста не надо ее полностью менять,просто скажите где изменить (программа написана преподом ...

Вопрос № 162.838
Здравствуйте,Помогите,пожалуйста.Требуется на языке C++ определить координаты первого и последнего вхождения в заданную строку заданного символа.
Заранее спасибо!
Отправлен: 21.03.2009, 10:05
Вопрос задал: максим кузнецов
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: Абельхарисов Руслан/Marked One
Здравствуйте, максим кузнецов!
Код программы с комментариями:
Код:
#include "stdafx.h"
#include "iostream"

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
//Строка
char string[255];
//Символ
char ch;
//Координаты первого и последнего вхождения
int f, e;
//Получаем строку
cout << "Input the string: ";
cin.getline(string, 255);
//Получаем символ
cout << "Input the char: ";
cin >> ch;
int i = 0;
//Перебираем строку, пока не встретим конец строки или...
while (string[i])
{
//...или пока не встретим нужный символ
if (string[i] == ch)
{
//Сохраняем его позицию в массиве-строке(нумерация в массиве c нуля) в переменной f
f = i;
//Выходим из цикла
break;
}
//Если не встеретили искомого символа, то увеличиваем счетчик на 1
i++;
}
//Теперь ищем последнее вхождение. Код аналогичен, только поиск идет с конца
i = strlen(string) - 1;
while (string[i])
{
if (string[i] == ch)
{
e = i;
break;
}
i--;
}
//Вывод рез-тов
cout << "First: " << f << " Last: " << e << endl;
system("PAUSE");
return 0;
}

Удачи!!!
Ответ отправил: Абельхарисов Руслан/Marked One (статус: Практикант)
Ответ отправлен: 21.03.2009, 10:37

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

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


    Вопрос № 162.850
    Доброго времени суток уважаемые эксперты Помогите пожалуйста с решением задачи - задана последовательность из N вещественных чисел. Вычислить порядковый номер числа наиболее приближенного к среднему арифметическому максимального и минимального чисел данной последовательности. Заранее благодарен В приложении кидаю решение такой же задачи, но на ЯП Pascal (там всё хорошо кроме заполнения случайными числами).

    Приложение:

    Отправлен: 21.03.2009, 12:56
    Вопрос задал: Sanyaoo (статус: Посетитель)
    Всего ответов: 2
    Мини-форум вопроса >>> (сообщений: 0)

    Отвечает: Hromovnik046
    Здравствуйте, Sanyaoo!

    Вот так я вижу вашу программу.

    Приложение:

    ---------
    Достигнув вершины горы, иди дальше...

    Ответ отправил: Hromovnik046 (статус: 3-й класс)
    Ответ отправлен: 21.03.2009, 17:52

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


    Отвечает: Micren
    Здравствуйте, Sanyaoo!
    Программа с комментариями. MS VS 2008. C++. Использовал STL.
    Код:

    #include <cstdlib>
    #include <limits>
    #include <locale>
    #include <iostream>
    #include <iomanip>
    #include <vector>

    using namespace std;

    // Ограничение на максимальный размер последовательности
    const unsigned int maxN=1000000;

    // Определим синонимы для краткости
    typedef vector<double> DVector;
    typedef vector<unsigned int> UIVector;

    int main()
    {
    locale::global(locale("rus_rus.866"));
    // Просим пользователя ввести количество элементов последовательности
    unsigned int N=0;
    while(!N)
    {
    wcout<<L"Введите количество чисел в пос ледовательности:";
    wcin>>N;
    // Проверяем на ошибки ввода/вывода
    if(wcin.fail())
    {
    wcout<<L"Ошибочный ввод"<<endl;
    wcin.clear();
    wcin.ignore(numeric_limits<streamsize>::max(),L' ');
    }
    else
    {
    wcin.ignore(numeric_limits<streamsize>::max(),L' ');
    if(N>maxN)
    {
    N=0;
    wcout<<L"Количество чисел не может превышать "<<maxN<<endl;
    }
    }
    }
    try
    {
    // Наш массив
    DVector arr(N);
    srand(static_cast<unsigned int>(time(0)));
    // Инициализируем значение минимального и максимального элемента
    double max=numeric_limits<double>::min();
    double min=numeric_limits<double>::max();
    // Заполняем массив случайными числами, выводим его на экран и сразу ищем максимум и минимум
    wcout<<L"Исходный массив:"<<endl;
    for(DVector::iterator it=arr.begin();it!=arr.end();++it)
    {
    *it=static_cast<double>(rand())/RAND_MAX*50;
    wcout<<setw(9)<<setprecision(5)<<*it<<L' ';
    max=max<*it?*it:max;
    min=min>*it?*it:min;
    }
    // Среднее арифметическое
    double mid=(min+max)/2;
    wcout<<endl
    <<L"Мин имальный элемент:"<<min<<endl
    <<L"Максимальный элемент:"<<max<<endl
    <<L"Среднее арифметическое:"<<mid<<endl;
    // Минимальное отклонение от среднего
    double minDifference=max-min;
    // Здесь будем хранить индексы
    UIVector indexes;
    // Перебираем элементы и ищем наиболее близкий к среднему
    for(unsigned int index=0;index<arr.size();++index)
    {
    // Отклонение от среднего
    double difference=abs(arr[index]-mid);
    // Если оно меньше или равно ранее найденному
    if(difference<=minDifference)
    {
    // Если меньше
    if(difference<minDifference)
    {
    // Сохраним его
    minDifference=difference;
    // Очистим наш вектор индексов
    indexes.clear();
    }
    // Запомним индекс
    indexes.push_back(index);
    }
    }
    // Результат работы
    wcout<<L"Элементы наиболее приближе нные к среднему арифметическому максимального и минимального элементов последовательности:"<<endl;
    for(UIVector::const_iterator it=indexes.begin();it!=indexes.end();++it)
    {
    wcout<<*it<<L"="<<arr[*it]<<endl;
    }
    }
    catch (bad_alloc)
    {
    wcout<<L"Ошибка выделения памяти"<<endl;
    }
    catch (...)
    {
    wcout<<L"Неизвестное исключение"<<endl;
    }
    system("PAUSE");
    return 0;
    }

    Пример работы:
    Код:

    Введите количество чисел в последовательности:100
    Исходный массив:
    21.764 3.8408 39.77 15.749 20.76 29.124 42.129 39
    15.21 37.649 37.503 0.28 535 8.3743 19.373 31.828 29.376
    43.205 23.684 17.203 4.2024 48.228 3.0107 47.304 5.855
    28.838 20.202 21.496 47.488 36.807 21.239 22.953 41.221
    25.829 49.841 31.092 42.099 25.925 5.5254 3.6302 33.143
    44.493 21.697 48.59 40.605 26.83 15.3 31.556 43.432
    33.966 34.643 38.502 16.059 20.55 6.8972 39.488 18.546
    20.69 11.898 23.554 23.144 24.49 33.752 0.12513 41.356
    3.1312 16.851 37.219 40.541 15.297 27.844 31.787 14.141
    2.7619 0.12207 32.504 44.572 7.9516 12.395 10.308 22.86
    21.287 27.897 47 14.078 41.124 45.817 37.223 32.649
    4.1108 41.485 24.154 16.558 18.766 46.899 14.164 14.582
    10.08 48.144 40.826 25.542
    Минимальный элемент:0.12207
    Максимальный элемент:49.841
    Среднее арифметическое:24.982
    Элементы наиболее приближенные к среднему арифметическому максимального и минима
    льного элементов последовательности:
    60=24.49
    Ответ отправил: Micren (статус: Студент)
    Ответ отправлен: 21.03.2009, 22:09

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


    Вопрос № 162.862
    Здравствуйте,у меня есть готовая программа релизующая стек и реализован поиск, она запускается, но не работают процедуры,можете указать на ошибку?Только пожалуйста не надо ее полностью менять,просто скажите где изменить (программа написана преподом вуза мне ее надо сдать примерно в таком формате) и не смотрите мелкие недочеты в оформлении,заранее спасибо

    Приложение:

    Отправлен: 21.03.2009, 16:12
    Вопрос задала: Алалыкина Оля (статус: Посетитель)
    Всего ответов: 2
    Мини-форум вопроса >>> (сообщений: 1)

    Отвечает: Hubbitus
    Здравствуйте, Алалыкина Оля!
    Да, Вы правы, код ужасный, и помоему для преподавателя это не допустимо тем более... Ну уж какой есть, как Вы и просили, особо менять ничего не буду.

    На сколько я понимаю, не работал тольоко поиск, остальное у меня работало сразу. ТАм просто не хватало считывания значения, которое собираетесь искать. Добавил, смотрите в приложении.

    Ну и еще пару заметок - я это на Линуксе, (gcc версия 4.3.0) соответственно убрал один инклюд и добавил другой. Ну и еще закоментировал вызов clrscr, который не переносим между платформами.

    Ах да, чуть не забыл, еще у Вас не хватало указание используемого именного пространства, хотя идентификаторы вроде cout, cin Вы использовали без указания нэймспэйса... Добавил using namespace std; в начале.

    Приложение:

    ---------
    Если у Вас есть все что Вы хотите - значит Вы мало хотите!

    Ответ отправил: Hubbitus (статус: 6-й класс)
    Ответ отправлен: 21.03.2009, 20:18

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


    Отвечает: Micren
    Здравствуйте, Алалыкина Оля!
    Как пример(правда довольно избыточный) того как это можно реализовать. Тестировался в CodeGear RAD Studio 2009. Как я понял именно борландовскими компиляторами Вы пользуетесь. На современных компиляторах(имеются ввиду компиляторы семейств VC++ и BC++ для Windows) проблем быть не должно.

    Пример работы:
    Код:

    1 - Добавление данных
    2 - Просмотр данных
    3 - Удаление данных
    4 - Поиск
    5 - Выход
    Сделайте свой выбор:2
    ---------------------------------------
    Стек содержит следующие элементы:
    ---------------------------------------
    1 - Добавление данных
    2 - Просмотр данных
    3 - Удаление данных
    4 - Поиск
    5 - Выход
    Сделайте свой выбор:1
    ---------------------------------------
    Введи те число(пустая строка для завершения):1
    Введите число(пустая строка для завершения):2
    Введите число(пустая строка для завершения):3
    Введите число(пустая строка для завершения):4
    Введите число(пустая строка для завершения):5
    Введите число(пустая строка для завершения):
    ---------------------------------------
    1 - Добавление данных
    2 - Просмотр данных
    3 - Удаление данных
    4 - Поиск
    5 - Выход
    Сделайте свой выбор:2
    ---------------------------------------
    Стек содержит следующие элементы:
    5
    4
    3
    2
    1
    ---------------------------------------
    1 - Добавление данных
    2 - Просмотр данных
    3 - Удаление данных
    4 - Поиск
    5 - Выход
    Сделайте свой выбор:4
    ---------------------------------------
    Введите число для поиска(пустая строка для завершения):30
    Такого значения в стеке нет
    Введите число для поиска(пустая строка для завершения):3
    Такое значение есть в стеке
    Введите число для поиска(пустая строка д ля завершения):
    ---------------------------------------
    1 - Добавление данных
    2 - Просмотр данных
    3 - Удаление данных
    4 - Поиск
    5 - Выход
    Сделайте свой выбор:3
    ---------------------------------------
    Элемент 5 удален
    Стек содержит следующие элементы:
    4
    3
    2
    1
    ---------------------------------------
    1 - Добавление данных
    2 - Просмотр данных
    3 - Удаление данных
    4 - Поиск
    5 - Выход
    Сделайте свой выбор:3
    ---------------------------------------
    Элемент 4 удален
    Стек содержит следующие элементы:
    3
    2
    1
    ---------------------------------------
    1 - Добавление данных
    2 - Просмотр данных
    3 - Удаление данных
    4 - Поиск
    5 - Выход
    Сделайте свой выбор:3
    ---------------------------------------
    Элемент 3 удален
    Стек содержит следующие элементы:
    2
    1
    ---------------------------------------
    1 - Добавление данных
    2 - Просмотр данных
    3 - Удаление данных
    4 - Поиск
    5 - Выход
    Сделайте свой выбор:3
    ---------------------------------------
    Элемент 2 удален
    Стек содержит следующие элементы:
    1
    ---------------------------------------
    1 - Добавление данных
    2 - Просмотр данных
    3 - Удаление данных
    4 - Поиск
    5 - Выход
    Сделайте свой выбор:3
    ---------------------------------------
    Элемент 1 удален
    Стек содержит следующие элементы:
    ---------------------------------------
    1 - Добавление данных
    2 - Просмотр данных
    3 - Удаление данных
    4 - Поиск
    5 - Выход
    Сделайте свой выбор:3
    ---------------------------------------
    Список пуст
    ---------------------------------------
    1 - Добавление данных
    2 - Просмотр данных
    3 - Удаление данных
    4 - Поиск
    5 - Выход
    Сделайте свой выбор:

    К сожалению максимальный объем приложения ограничен 12000 символами. Поэтому пришлось пожертвовать функционалом списка(который в этой программе не используется) и, что самое обидное , комментариями(которые я старательно набирал).

    Приложение:

    Ответ отправил: Micren (статус: Студент)
    Ответ отправлен: 22.03.2009, 16:02

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

    В избранное