Вопрос № 149367: Здравствуйте уважаемые эксперты! Помогите пожалуйста решить задачу на С: <b>Разработать программу формирования стека с последующим его преобразованием в двунаправленную очередь.</b> Заранее благодарен....
Вопрос № 149428: Здраствуйте уважаемые господа эксперты! Помогите пожайлуста в написании программы: 1. Имеется файл «Продажа квартир», содержащий адрес, тип дома и число комнат. В режиме диалога с ЭВМ покупатель
вводит тип дома и число комнат. Необходимо вывес...Вопрос № 149439: Здравствуйте уважаемые эксперты. Я только начинаю изучать C++ Builder... Проблема в следующем - имеется строка AnsiString. Нужно из этой строки в формате AnsiString скопировать подстроку. Тыкните пожалуйста в функцию. Всем ответившим заран...Вопрос № 149442: Добрый день уважаемые эксперты. Помогите пожалуйст
а решить такую задачу: объект класса CMap заполняется объектами CString в качестве ключей и пользовательскими объектами MyClass в качестве значений. Для этого я использую CMapStringToPtr. CMapS...
Вопрос № 149.367
Здравствуйте уважаемые эксперты! Помогите пожалуйста решить задачу на С: Разработать программу формирования стека с последующим его преобразованием в двунаправленную очередь. Заранее благодарен.
Отвечает: Arct
Здравствуйте, михайлов, александр, витальевич! В чем проблема Александр? Базовые понятия: Стек: Можно представить как калоду карт т.е. Кладём карту, поверх неё ещё и ещё - это мы помещаем некие данные в стек Если нужно взять данные, мы берем верхнюю карту... Так называемый принцип FIFO - первым вошёл - последним вышел. Очередь(однонаправленная): Реализует другой принцип, Первым вошёл, первым вышел. Можно представить себе очередь как ту-же колоду карт, только если надо взять данные
берем, не верхнюю карту а нижнюю.
Если этой информации мало, извеняйте. Как задан вопрос... Уточните данные, какой тип данных используется? int? double? char? Размер предпологаемого стекаочереди(хотя это не так важно) Каким образом преобрзовывать?
Ответ отправил: Arct (статус: 1-й класс)
Ответ отправлен: 04.11.2008, 00:16
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 149367 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Вопрос № 149.428
Здраствуйте уважаемые господа эксперты! Помогите пожайлуста в написании программы: 1. Имеется файл «Продажа квартир», содержащий адрес, тип дома и число комнат. В режиме диалога с ЭВМ покупатель вводит тип дома и число комнат. Необходимо вывести на экран дисплея адреса трех квартир данного типа, цена на которые минимальна.
Отправлен: 04.11.2008, 09:06
Вопрос задал: Dragonlio (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Dr_Andrew
Здравствуйте, Dragonlio! Вашу задачу можно разбить на три этапа: 1) Написание класса, где будет храниться информация о конкретном доме; 2) Написание синтаксического анализатора, который будет разбирать строки, загруженные из файла и 3) Выбор домов на основании данных, введённых пользователем, и сортировка их по цене.
1) Объявим класс THouse (см. файлы THouse.h и THouse.cpp); для упрощения задачи объявим все члены класса открытыми (public). Для хранения информации о типе дома объявим перечислимый тип:
enum THouseType {UnknownType = 0, CottageType = 1, MultistoriedType = 2}; Соответственно, класс THouse будет содержать следующие члены: string sAddress; // Строка для хранения адреса THouseType htHouse; // Тип дома short nFlatsNumber; // Число комнат unsigned int uiPrice; // Цена дома
2) Объявим класс синтаксического анализатора THouseParser (см. файлы THouseParser.h и THouseParser.cpp), который в качестве члена будет содержать вект
ор строк для хранения информции из файла: vector<string> sStrings; Предполагается, что файл будет следующего типа: информация о каждом доме содержится в отдельной строке; пустых строк нет; разделительным символом, отграничивающим значащие части (адрес, тип дома, число комнат, цена) является символ табуляции. Кроме того, класс содержит следующие функции-члены: bool bLoadStrings(string); // Загружает строки из файла и сохраняет их в векторе sStrings; в качестве аргумента принимает путь к файлу.
THouse ParseString(int); // Функция, проводящая собственно синтаксический разбор строки с заданным номером, который принимает как аргумент. Последняя функция возвращает объект класса THouse, значения членов которого присвоены на основании синтаксического разбора строки
3) Реализация основой логики работы программы отражена в файле main.cpp. Объект класса THouseParser пытается загрузить файл и, если это не удаётся, то программа завершает работу:
В векторе домов (THouse) vector<THouse> HouseNumber; сохраним информацию, полученную на основании разбора строк синтаксическим анализатором:
Код:
vector<THouse> HouseNumber; for(unsigned int i = 0; i <= (Parser.sStrings.size() - 1); i++) { HouseNumber.push_back(Parser.ParseString(i)); }
Нам понадобятся ещё несколько объектов: THouse Se
lectedHouse; - для хранения информации о предпочтениях, указанных пользователем (тип дома и число комнат, согласно условиям задачи) и вектор vector<THouse> SelectedHouseNumber; для хранения информации о всех домах, которые соответствуют заявленным требованиям. Сигналом о нахождении одходящего дома служит булевая переменная (bool bIsFound = false; // по-умолчанию - подходящие дома ещё не найдены), хотя вместо неё можно было бы использовать размер массива отобранных домов (SelectedHouseNumber.size()).
В том случае, если подходящих домов не найдено (bIsFound == false), то программа сообщает об этом и завершает работу. В противном случае именно среди отобранных домов, мы проведём сортировку по наименьшей цене:
Код:
if(SelectedHouseNumber.size
() > 1) // Если найдено больше одного дома { THouse Buffer; for(unsigned int i = 0; i <= (SelectedHouseNumber.size() - 1); i++) { for(unsigned int j = 0; j <= (SelectedHouseNumber.size() - 1); j++) { if(SelectedHouseNumber[j].uiPrice > SelectedHouseNumber[j + 1].uiPrice) { Buffer = SelectedHouseNumber[j]; SelectedHouseNumber[j] = SelectedHouseNumber[j
+ 1]; SelectedHouseNumber[j + 1] = Buffer; } } } }
Подробнее - см. в приложении. Удачи!
Приложение:
Ответ отправил: Dr_Andrew (статус: Студент)
Ответ отправлен: 05.11.2008, 12:21
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 149428 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Вопрос № 149.439
Здравствуйте уважаемые эксперты. Я только начинаю изучать C++ Builder... Проблема в следующем - имеется строка AnsiString. Нужно из этой строки в формате AnsiString скопировать подстроку. Тыкните пожалуйста в функцию. Всем ответившим заранее благодарен.
Отвечает: Dr_Andrew
Здравствуйте, DismalGhost! Строковый класс AnsiString содержит функции-члены для работы с фрагментами строки: поиcка (Pos), вставки (Insert), удаления (Delete) и получения копии (SubString) фрагмента текста в строке. В Вашем случае необходима последняя: AnsiString __fastcall SubString(int StartPosition, int HowManyChars) const; где StartPosition - позиция первого символа подстроки, а HowManyChars - последнего. Например, AnsiString S1 = "Строка"; AnsiString S2 = S1.SubString(1,
3);
Ответ отправил: Dr_Andrew (статус: Студент)
Ответ отправлен: 04.11.2008, 11:53
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 149439 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Вопрос № 149.442
Добрый день уважаемые эксперты. Помогите пожалуйста решить такую задачу: объект класса CMap заполняется объектами CString в качестве ключей и пользовательскими объектами MyClass в качестве значений. Для этого я использую CMapStringToPtr. CMapStringToPtr map; CString key; MyClass man; for (int i = 0; i < 10; i++) { map.SetAt(key, &man); } заполняется нормально. Но при попытке получить из словаря map значения с помощью POSITION pos; CString tmp; MyClass man1; pos = map.GetStartPosition(); map.GetNextAssoc(pos,
key, &man1); выдает ошибку: cannot convert parameter 3 from 'MyClass *__w64 ' to 'void *&' Я так понимаю что нужно как-то преобразовать к указателю void*, но как это сделать не знаю. Подскажите пожалуйста.
Отправлен: 04.11.2008, 12:30
Вопрос задал: Uran23 (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Ashotn
Здравствуйте, Uran23! Нужно преобразовать в *&CObject
Ответ отправил: Ashotn (статус: 1-й класс)
Ответ отправлен: 05.11.2008, 09:28
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 149442 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценка за ответ: 5
Скажите "спасибо" эксперту, который помог Вам!
Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
на короткий номер 1151 (Россия)
Номер ответа и конкретный текст СМС указан внизу каждого ответа.
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.