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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.10.2015, 17:05   #1
Лилия1993
Новичок
Джуниор
 
Регистрация: 18.10.2015
Сообщений: 3
Восклицание Помогите язык с++

На вход программе дается 2 строки, состоящие из букв английского алфавита. По следющим правилам строится третья строка, которая и будет результатом работы программы:
1)Берется первая строка, начинается прохождение строки с первого символа. Если буква согласная, то она просто переносится в строку результата, если же гласная, то тогда смотрится, сколько раз эта буква встречается в 1 и 2 строке. Если количество встреч данного символа меньше во второй строке, то в строку результата просто записывается эта буква, иначе она дважды записывается в строку результата.
2) Теперь берем вторую строку и работаем по похожему принципу, что и в первом пункте, однако строку рассматриваем не с начала, а с конца. Но гласные теперь просто переносятся в результат, а согласные, которые во второй строке встречаются реже - удалятся, иначе просто переносятся в единичном экземпляре.
Пример работы программы:
ТЕТРИС
ТЕОРЕМА
Результат: ТЕЕТРИСАМЕОЕ
P.S. Понимаю, что запутанное условие, но уже неделю не могу разобраться с этой штукой. Очень нужна помощь!Заранее спасибо.

Код:
#include "stdafx.h"
#include <stdio.h> 
#include <string.h> 
#include <locale.h> 
 
int main()
{
    int i = 0, j = 0,k = 0, l = 0, k1 = 0, k2 = 0, len1 = 0, len2 = 0, p1 = 0, p2 = 0, sim = 0;
    char glas[] = "eyuioaqwrtpsdfghjklzxcvbnm";
    //char sogl[] = "qwrtpsdfghjklzxcvbnm";
    char  str1[80] = { "\0" };
    char str2[80] = { "\0" };
    char str[80] = { "\0" };
    int leng = strlen(glas),  len = 0;
 
    printf("Vvedite 2 stroki \n");
    gets_s(str1);
    gets_s(str2);
    len1 = strlen(str1);
    len2 = strlen(str2);
    for (i = 0; i < len1; i++)
    {
         for (j = 0; j < leng; j++)
         if (str1[i] == glas[j] && j < 6) {
             sim = glas[j];
             for (k = 0; k < len1; k++)
             
                 if (str1[k] == sim)
                     k1++;
             
             for (l = 0; l < len2; l++)
             
                 if (str2[l] == sim)
                     k2++;
             
             if (k1 > k2) 
                 str[i] = sim;
             else  
                 str[i] = sim;
                 str[i + 1] == sim;
         } 
         }
 
    
        puts(str);
        
        return(0);
}

Последний раз редактировалось Stilet; 18.10.2015 в 17:09.
Лилия1993 вне форума Ответить с цитированием
Старый 18.10.2015, 17:10   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

С++ использовать нельзя? Только Классический Си?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.10.2015, 17:24   #3
Лилия1993
Новичок
Джуниор
 
Регистрация: 18.10.2015
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
С++ использовать нельзя? Только Классический Си?
Можно и то и то,но лучше классический
Лилия1993 вне форума Ответить с цитированием
Старый 18.10.2015, 18:46   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Забавная задачка:
Код:
// пп.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <string.h>
#include <locale.h>

char *s1="ТЕТРИС",*s2="ТЕОРЕМА",*gl="УЕЫАОИЯЮ",r[255]={0};
int i,j,k=0,cnt1,cnt2;

void step(char c,bool b) {
		char *pc=strchr(gl,c);
		cnt1=0; cnt2=0;
		for(j=0;s1[j];j++) cnt1+=c==s1[j];
		for(j=0;s2[j];j++) cnt2+=c==s2[j];

		if(b){
			r[k++]=c;  if(pc && cnt1<cnt2) r[k++]=c; 
		} else {
			if(pc) r[k++]=c; else
			if(cnt1<cnt2) r[k++]=c;
		}

}

int _tmain(int argc, _TCHAR* argv[])
{

	for(i=0;s1[i];i++)				step(s1[i],true); 
	for(i=strlen(s2)-1;i>=0;i--)	step(s2[i],false);
	setlocale(LC_ALL,"Russian");
	printf("%s",r); getchar();
	return 0;
}
Устроит?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.10.2015, 19:11   #5
Лилия1993
Новичок
Джуниор
 
Регистрация: 18.10.2015
Сообщений: 3
По умолчанию

не совсем по условию, но поможет, спасибо большое
Лилия1993 вне форума Ответить с цитированием
Старый 18.10.2015, 19:50   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
не совсем по условию
Ну извиняйте сударыня. Я ваших преподов нихьт панимайтен.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.10.2015, 22:47   #7
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Думаю, на этом этапе требование "преподов" одно: умение ясно мыслить и ясно излагать свои мысли на "иностранном" языке под названием Си. Ну и постепенное, но неотвратимое вбивание в будущего профессионала аксиомы "Если неприятность может случиться - она случится обязательно!". Ввели одну строку в 50 символов и вторую - в 50. А размерность str[] - какая?.. Ввели "tetris" и "tEorEma". Что получили? А что должны были получить?..
Код:
int main() {
    
   int i, j, k, k1, k2, len1, len2, leng;
   char glas[] = "aeiouy";
   char str1[80];
   char str2[80];
   char str[80];
 
   printf("Vvedite 2 stroki \n");
   gets_s(str1);
   gets_s(str2);
   len1 = strlen(str1);
   len2 = strlen(str2);
   leng = strlen(glas);

   k = 0;		// индекс, куда пишем в str[]
   for (i = 0; i < len1; i++) {
      sim = str1[i];  // Инициализация sim должна быть здесь. У Вас, в случае согласной, sim не определено!
      for (j = 0; j < leng; j++) {
//bad!   if (str1[i] == glas[j] && j < 6) {	// "No magic numbers!". leng - это в данном случае 6 и есть.
         if ( sim == glas[j] )
            break; 
      }
//wrong! sim = glas[j];	// Как уже было сказано, в случае согласной, sim - не определено.
      // Этот анализ должен быть ЗА ПРЕДЕЛАМИ цикла по j		
      if ( j < leng ) {	// Гласная
         k1 = 0;        // Для КАЖДОГО анализируемого символа счётчики числа вхождений надо инициализировать заново!
//       for (k = 0; k < len1; k++) { Не плодите индексы без меры!
         for (j = 0; j < len1; j++) {
            if (str1[j] == sim)
               k1++;
         }	
         k2 = 0; // ...и второй счётчик, разумеется, тоже.
         for (j = 0; j < len2; j++) {
            if (str2[j] == sim)
               k2++;
         }

         if (k1 > k2) {
//wrong! str[i] = sim;	// i = это какой эл-т str1[] мы проверяем, а не куда в str[] мы пишем!!
            str[k] = sim;
            ++k;
         } else { 
//wrong!   str[i] = sim; // Аналогично!
           str[k] = sim;
//wrong!   str[i + 1] == sim; // ПРЕДУПРЕЖДЕНИЯ компилятора тоже нужно читать! Тут - присваивание, а не сравнение! = а не == 
           str[k+1] = sim;
           k += 2;
         } 
      } else {		// j == leng Согласная. Про эту ветвь Вы вообще забыли!!
         str[k] = sim;
         ++k;
      }
   }
		
   for ( i = len2-1; i >= 0; i-- ) {
      // Прописать цикл для второй строки предлагается в качестве самостоятельного упражнения.
   }
   str[k] = '\0'; 
        
   puts(str);
        
   return(0);

}
Vago вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с отладкой язык Си dykee Помощь студентам 5 20.10.2013 23:12
Помогите пожалуйста(язык Си) dannae Помощь студентам 6 15.10.2013 16:34
Помогите с прогой. язык Pascal Dif Помощь студентам 1 22.12.2009 08:06
Помогите выбрать язык RNT Помощь студентам 3 23.05.2009 19:27