Задача на нахождения столицы по стране

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Arkass
Сообщения: 1
Зарегистрирован: 21 дек 2014, 16:09

Добрый день помогите написать программу в С++
завтра зачёт нужно принести её, буду очень признателен и благодарен.

Задание:
Напишите программу для любознательного, но туповатого путешественника, которая при наборе страны выдаст на экран столицу данной страны и количество народа, проживающего в ней. Данные для программы:
Страна Столица Население (млн. чел.)
Венгрия Будапешт 11
Италия Рим 60
Греция Афины 10
Турция Анкара 55
Египет Каир 53
Непал Катманду 18
Бельгия Брюссель 10

Зарание большое спасибо :rolleyes:
Bce_OK
Сообщения: 8
Зарегистрирован: 18 ноя 2014, 20:25

На вскидку, как-то так. Я не проверял

Код: Выделить всё

#include <iostream>
#define MAX_COUNTRY 7
struct country{
	char* name;
	char* capital;
	int demography;
	country (const char* n, const char c, const int d)
	{
		strcpy(name, n);
		strcpy(capital, c);
		demography = d;
	}
};

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

	country countries[MAX_COUNTRY] = { 
					country("Венгрия", "Будапешт", 11),
					country("Италия", "Рим", 60),
					country("Греция", "Афины", 10),
					country("Турция", "Анкара", 55),
					country("Египет", "Каир", 53),
					country("Непал", "Катманду", 18),
					country("Бельгия", "Брюссель", 10)
				};
	std::cout<<"Введите страну: ";
	std::cin>>country_name;
	for(int i=0; i<MAX_COUNTRY; ++i)
	{
		if( strcmp(countries[i].name,country_name) == 0)
		{
			std::cout<<"Столица: "<<countries[i].capital<<std::endl;
			std::cout<<"Население: "<<countries[i].demography<<std::endl;
			return 0;

		}

	}
	std::cout<<"страна не найдена"<<std::endl;

	return 0;
}
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

В структуре country не выделяется память под строки. Программа будет падать.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Ещё в строке const char c пропущена звёздочка.

Но в любом случае писатель программы предупредил, что это навскидку. Топикстартер должен сам доработать программу и попутно разобраться почему так делать нельзя и как делать правильно :)
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Decoder
Сообщения: 308
Зарегистрирован: 19 фев 2008, 23:11
Откуда: Moscow

Поскольку все строковые значения в данном примере прописаны статически в программном коде, то в контексте данного примера память под строки в структуре country можно и не выделять, достаточно просто присвоить внутренним полям структуры соответствующие значения входных указателей. И этот пример заработает.
Но если делать как положено, то можно вместо функции strcpy вызывать функцию strdup. Ещё в структуру country нужно будет деструктор добавить, чтобы из него вызывать функции free для освобождения выделенной памяти.
Поумнеть несложно, куда труднее от дури избавиться.
Ответить