Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.04.2017, 11:06   #1
Ossuary
Пользователь
 
Регистрация: 11.04.2017
Сообщений: 11
По умолчанию [C++] Рекурсия. Задан набор слов. Построить из них любую цепочку таким образом, чтобы символ в конце слова совпадал с символом в начале следующего

Народ тут вот такое задание :
Задан набор слов. Построить из них любую цепочку таким образом, чтобы символ в конце слова совпадал с символом в начале следующего.

Состряпал код , вроде бы должно быть правильно , но компилятор ругается сильно, пользуюсь средой Dev C++
Код:
#include <stdio.h>
#include <string.h>
#include <iostream>
int main () 
{ 
setlocale(LC_ALL, "russian"); 
char LastLetter = 'a'; 
// Создание двумерного массива для хренения слов
char *Word[] = { 
"Moskva", 
"Kiev", 
"Dubna", 
"Kaluga", 
"Amursk", 
"Volgograd", 
"Krim", 
"Magnitogorsk", 
"Arhangelsk", 
"Anapa", NULL};  
char Chain[1000];
strcpy (Chain, World[0]);
for (int counter = 0 ; counter < 9 ; counter++)
{
	LastLetter = Chain[strlen(Chain) - 1];
	for (int i=counter + 1; i<10 ; i++)
	{
		if (world[i][0] == LastLetter)
		{
			strcat (Chain, World[i]);
			break;
		}
	}
}
printf ("%s", Chain );
getch();
return 0;
}
Ossuary вне форума Ответить с цитированием
Старый 13.04.2017, 11:32   #2
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

А причём здесь рекурсия?
А ещё не понятно, почему ты используешь элементы языка Си и С++ вместе...
___________________________________ _____________________
___________________________________ _____________________

У тебя имя "World" везде разное.
Вот, что-то выводит:
Код:
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;

int main()
{
	setlocale(LC_ALL, "russian");
	char LastLetter = 'a';
	// Создание двумерного массива для хренения слов
	char *World[] = {
		"Moskva",
		"Kiev",
		"Dubna",
		"Kaluga",
		"Amursk",
		"Volgograd",
		"Krim",
		"Magnitogorsk",
		"Arhangelsk",
		"Anapa", NULL };
	char Chain[1000];
	strcpy(Chain, World[0]);
	for (int counter = 0; counter < 9; counter++)
	{
		LastLetter = Chain[strlen(Chain) - 1];
		for (int i = counter + 1; i<10; i++)
		{
			if (World[i][0] == LastLetter)
			{
				strcat(Chain, World[i]);
				break;
			}
		}
	}
	printf("%s", Chain);

	scanf("%c", LastLetter);//чтобы консоль не закрывалась
	return 0;
}
ura_111 вне форума Ответить с цитированием
Старый 14.04.2017, 06:38   #3
Ossuary
Пользователь
 
Регистрация: 11.04.2017
Сообщений: 11
По умолчанию

21 17 [Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]

выдает кучу ошибок, именно вот эту строчку, не компилирует он...
Ossuary вне форума Ответить с цитированием
Старый 14.04.2017, 14:34   #4
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

У меня всё ОК:

1.jpg

\__________________________________ ________________________
___________________________________ _________________________

наверно это от компилятора зависит...
Ну ладно, замени на обычный массив:


2.jpg
ura_111 вне форума Ответить с цитированием
Старый 15.04.2017, 16:13   #5
Ossuary
Пользователь
 
Регистрация: 11.04.2017
Сообщений: 11
По умолчанию

ura_111 , а вы пробовали вводить значения сами? компилятор не ругается, за это спасибо, но программа если что то ввести закрывается ошибкой,может что то ввожу не так?
Изображения
Тип файла: jpg Безымянный.jpg (41.0 Кб, 65 просмотров)
Ossuary вне форума Ответить с цитированием
Старый 15.04.2017, 18:01   #6
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

1) Ошибка выбила, потому что забыл поставить адрес "&" в
Код:
scanf("%c", &LastLetter);
Поставь и ошибка уйдёт.

2) Ничего вводить в программу не надо (для этого в ней ничего не предусмотрено). В программе жестко задаётся массив слов и всё...
Кстате, в Си различаются верхний и нижний регистр, и если сделать все буквы маленькими, тогда:

1.jpg

p.s.: сейчас только заметил, опять забыл поставить "&" .

3) У меня ругается на "getch();", поэтому я заменил его на "scanf("%c", &LastLetter);". В обоих случаях, программа ждёт ввода информации от пользователя перед закрытием... Но если у тебя работает "getch();" - можешь его оставлять.

4) А если надо вводить слова с консоли, тогда нужно какое-то ограничение на кол-во слов, типа такого:

2.jpg


Ну, а если ты хочешь вводить (все слова) в виде одной строки, тогда "scanf" тебе не подойдёт, потому что он принимает ввод до первого пробела, а надо что-то вроде такого:

3.jpg


т.е. сначала вводишь все слова в виде отдельной строки (в дополнительный массив - для этого ввода тогда ещё один массив нужен). Как в примере вводишь строку со словами.
Потом расчленяешь строку на отдельные слова, которые помещаешь массив "World".
А потом обрабатываешь своим алгоритмом...

Последний раз редактировалось ura_111; 15.04.2017 в 18:08.
ura_111 вне форума Ответить с цитированием
Старый 17.04.2017, 07:00   #7
Ossuary
Пользователь
 
Регистрация: 11.04.2017
Сообщений: 11
По умолчанию

ura_111, огромное спасибо!!!! всё доступно и понятно расписали !
Ossuary вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задан набор слов, построить цепочку ( Delphi ) Ирина Халитова Помощь студентам 0 13.01.2013 18:00
упорядочить одномерный массив таким образом,чтобы сначалашлиупорядоченные положительные члены и tarasman11 Паскаль, Turbo Pascal, PascalABC.NET 5 05.07.2012 20:16
Вывести слова предложения в таком порядке, чтобы последняя буква каждого слова совпадала с первой буквой следующего слова ( java ) huhu Помощь студентам 0 06.04.2012 19:42
Преобразовать строку таким образом, чтобы цифры каждого слова были перенесены в начало слова, изменив порядок следования цифр в с Нортон Общие вопросы C/C++ 0 11.02.2012 18:38
Преобразовать строку таким образом, чтобы буквы каждого слова в ней были отсортированы по возрастанию. Matr1x Общие вопросы C/C++ 4 07.01.2010 21:38