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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2014, 21:53   #1
ArtyomOdinson
 
Регистрация: 14.10.2014
Сообщений: 4
По умолчанию Найти количество неповторяющихся слогов в прямоугольной символьной матрице. Не получается додуматься до условия C++

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

Код:
#include "stdafx.h"
#include "windows.h"
#include "iostream"
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	int  i = 0, j = 0, n, m,k=0; char q, w;
	char a[10][10];
	printf("Vvedite kollichestvo strok:\n");
	scanf_s("%d", &n);	
	printf("Vvedite kollichestvo stolbcov:\n");
	scanf_s("%d", &m); 
	printf("Vvedite elementi matrici:\n");
	for (i = 0; i < n; ++i)
	{
		for (j = 0; j <m; ++j)
		{
			
			cin >> a[i][j];
		}
	}
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < m; j++)
		{
			printf("%C", a[i][j]);
			cout << a[i][j];
		}
		printf("\n");
		cout << "\n";
	}
	
	for (i = 0; i < n; i++)
	{
		for (j = 0; j <m; j++)
		{				
			if ((a[i][j] >= 'a') && (a[i][j] <= 'z'))					
			if ((a[i][j] == 'w') || (a[i][j] == 'r') || (a[i][j] == 't') || (a[i][j] == 'p') || (a[i][j] == 's') || (a[i][j] == 'd') || (a[i][j] == 'f') || (a[i][j] == 'g') ||
				(a[i][j] == 'h') || (a[i][j] == 'j') || (a[i][j] == 'k') || (a[i][j] == 'l') || (a[i][j] == 'z') || (a[i][j] == 'x') || (a[i][j] == 'c') || (a[i][j] == 'v') ||
				(a[i][j] == 'b') || (a[i][j] == 'n') || (a[i][j] == 'm') || (a[i][j] == 'q') && (a[i + 1][j + 1] == 'e') || (a[i + 1][j + 1] == 'y') || (a[i + 1][j + 1] == 'u') 
				|| (a[i + 1][j + 1] == 'i') || (a[i + 1][j + 1] == 'o') || (a[i + 1][j + 1] == 'a'))
			{				
				cout << "slogi: " << a[i][j] << a[i + 1][j + 1];
				k++;
			}		
								
		}
	}

	
	

	cout << "\n";
	cout << "kolichestvo slogov: " << k;
	cout << "\n";
	system("pause");
	return 0;
}
ArtyomOdinson вне форума Ответить с цитированием
Старый 14.10.2014, 22:11   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Ты серьёзно надеешься, что такую колбасу реально кто-то читать будет?
Мне даже компилятор жалко. Препод-маньяк запретил использовать функции?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 14.10.2014, 22:30   #3
ArtyomOdinson
 
Регистрация: 14.10.2014
Сообщений: 4
По умолчанию

их еще не проходили , программирование только началось
ArtyomOdinson вне форума Ответить с цитированием
Старый 14.10.2014, 23:00   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
их еще не проходили , программирование только началось
то есть самостоятельное изучение не только не приветствуется, но и категорически запрещено??!!!11

Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 15.10.2014, 10:06   #5
ArtyomOdinson
 
Регистрация: 14.10.2014
Сообщений: 4
По умолчанию

посмотрел я функции , написал с с помощью функций , но проблема то у меня не в этом, а в том что не со всем получается с условием , я не прошу написать его, только намекнуть , подкинуть идею
ArtyomOdinson вне форума Ответить с цитированием
Старый 15.10.2014, 10:25   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
не со всем получается с условием
С каким условием?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 15.10.2014, 10:40   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
только намекнуть , подкинуть идею
подкидываю идею.
даже две.
первая - заводите отдельный одномерный массив для хранения найденных слогов (его размер можно взять с избытком, слогов явно будет меньше произведения строк на столбцов, поэтому размер массива можно взять (10*10) slogi[100]
вначале индекс слогов равен -1 (т.е. количество равно индекс + 1 == нулю).

потом правильно (вы перебираете неправильно, см. ниже ремарку) перебирать сочетания символов, если нашли слог (т.е. слева или сверху isSoglasnay(a[i,j]) и справа isGlasnay(a[i,j+1]) или снизу isGlasnay(a[i+1,j]) ) - то нашли слог.
Каждый найденный слог проверять на наличие в этом массиве (можно прямо перебором), если его там нет - добавлять в массив, увеличив индекс найденных слогов.
При поиске слогов проверяем индексы строки, столбца, чтобы НЕ выскочить за пределы массива!
после окончания основного цикла перебора массива A можно вывести содержимое массива slogi - это будут найденные слоги.

второй вариант немного сложнее алгоритмически и чуть менее эффективен, зато не потребует дополнительной памяти в массиве. Он заключается в написании отдельной функции, которая проверяет, встречается ли найденное сочетание символов РАНЕЕ. "Ранее" - это значит либо строка i<iChecked, либо, если i==iChecked, столбец j<jChecked.
тогда поступаем так. Тот же цикл поиска слогов (см. вариант 1).
Если нашли слог, то вызываем функцию проверки (передаём в неё текущие индексы проверяемого слога). Эта функция возвращает true - если символы ранее не встречались и false - в противном случае. увеличиваем счётчик найденных слогов. В этом варианте найденный уникальный слог надо сразу выдавать на экран. Потому что сами слоги мы нигде не храним. Получится, что сначала будут выведены на экран все уникальные слоги, а потом, после окончания перебора массива, можно будет выдать и их количество.

если надо - набросаю пример алгоритма на псевдокоде...

ремарка.
да и цикл перебора у Вас написан с ошибкой, подумайте, что будет в этой строке:
Цитата:
Код:
a[i + 1][j + 1]
когда цикл по i или по j достигает крайнего элемента!

Последний раз редактировалось Serge_Bliznykov; 15.10.2014 в 10:44.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.10.2014, 17:00   #8
ArtyomOdinson
 
Регистрация: 14.10.2014
Сообщений: 4
По умолчанию

Спасибо, понял
ArtyomOdinson вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В прямоугольной матрице определить столбец, в котором все элементы расположены в порядке возрастания их значений (Unit и Program) 6565 Паскаль, Turbo Pascal, PascalABC.NET 5 08.06.2014 21:06
Oпределить количество слов, состоящих из одного, двух, трех и более слогов. TIGRA3 Паскаль, Turbo Pascal, PascalABC.NET 4 03.02.2014 21:16
Минимакс в прямоугольной матрице L3zh1Y Общие вопросы Delphi 4 19.01.2012 18:31
в целочисленной прямоугольной матрице вывести элементы последней строки в обратном порядке fanofinter Паскаль, Turbo Pascal, PascalABC.NET 3 07.11.2011 11:14