Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Поочередное выделение цветом символов в тексте


Автор: ratgunter 17.11.2008, 12:24
нужно в с++ дописать прогу так, чтобы символы(отличные от букв и пробелов) в выделенном предложении выделялись не сразу все, а поочередно.

Вот само задание
(1.    С помощью текстового редактора создать файл, содержащий текст, длина которого не превышает 1000 символов (длина строки текста не должна превышать 70 символов). Имя файла должно иметь расширение DAT. Написать программу, которая: 1)  выводит текст на экран дисплея; 2) определяет в каждом предложении текста количество символов, отличных от букв и пробелов; 3) по нажатию произвольной клавиши поочередно выделяет каждое предложение текста, а в выделенном предложении – поочередно все символы, отличные от букв и пробелов.)


#include <iostream.h>
#include <fstream.h>
#include <conio.h>
#include <constrea.h>

void main()
{
   clrscr ();
   constream h;
   char ch=0;
   int k=1;
   int a=0;
   int mas[7];
   int count=0;
   ifstream fin("rat.dat");
   if(!fin)
       {
        cout<<"File not found";
        getch();
       }
   else
       {
        while (fin.get(ch))
          {
               textcolor(15);
               h << ch;
               if (ch!=' ' && (ch<'a'||ch>'z')&&(ch<'A'||ch>'Z')&&ch!='\n')
                   {
                    count++;
                    if ((ch=='.')||(ch=='!')||(ch=='?'))
                    {
                      textcolor(14);
                      h <<"("<<"v"<<k<<"-"<<count<<")";
                      k++;
                      ch++;
                      for(a=0;a<7;a++)
                      mas[a]=count;
                      count=0;
                    }
                   }
          }
          for (int i=0;i<k;i++)
          {
             for (int s=0; s<mas[7]; s++)
             {
              fin.clear();
              fin.seekg(0);
              getch();
              clrscr();
              int j=0;
              while (fin.get(ch))
                 {   for(a=0;a<7;a++)
                 {
                 if (j==i) textcolor (14);
                 else textcolor(15);
                 if(j==i&&mas[a]==s)
                      {
                      textcolor (13);
                      }
                 h<<ch;
                 s++;
                 }
                 if ((ch=='.')||(ch=='!')||(ch=='?'))
                 j++;
                 }

             }
                  }
     }
   fin.close();
   getch();
}

Автор: DareDevil225 17.11.2008, 12:31
Используйте тег КОД () пожалуйста, а то мало того что такой бешеный код, так еще и нечитабельный абсолютно

Автор: ratgunter 17.11.2008, 12:36
Первый раз на сайте, как это сделать?

Добавлено через 7 минут и 35 секунд
Код

#include <iostream.h>
#include <fstream.h>
#include <conio.h>
#include <constrea.h>

void main()
{
   clrscr ();
   constream h;
   char ch=0;
   int k=1;
   int a=0;
   int mas[7];
   int count=0;
   ifstream fin("rat.dat");
   if(!fin)
       {
        cout<<"File not found";
        getch();
       }
   else
       {
        while (fin.get(ch))
          {
               textcolor(15);
               h << ch;
               if (ch!=' ' && (ch<'a'||ch>'z')&&(ch<'A'||ch>'Z')&&ch!='\n')
                   {
                    count++;
                    if ((ch=='.')||(ch=='!')||(ch=='?'))
                    {
                      textcolor(14);
                      h <<"("<<"v"<<k<<"-"<<count<<")";
                      k++;
                      ch++;
                      for(a=0;a<7;a++)
                      mas[a]=count;
                      count=0;
                    }
                   }
          }
          for (int i=0;i<k;i++)
          {
             for (int s=0; s<mas[7]; s++)
             {
              fin.clear();
              fin.seekg(0);
              getch();
              clrscr();
              int j=0;
              while (fin.get(ch))
                 {   for(a=0;a<7;a++)
                 {
                 if (j==i) textcolor (14);
                 else textcolor(15);
                 if(j==i&&mas[a]==s)
                      {
                      textcolor (13);
                      }
                 h<<ch;
                 s++;
                 }
                 if ((ch=='.')||(ch=='!')||(ch=='?'))
                 j++;
                 }

             }
                  }
     }
   fin.close();
   getch();
}



Автор: DareDevil225 17.11.2008, 13:11
Насколько я понял с ходу - попробуйте так
Код

#include <iostream.h>
#include <fstream.h>
#include <conio.h>
#include <constrea.h>

void main()
{
   clrscr ();
   constream h;
   char ch=0;
   int k=1;
   int a=0;
   int mas[7];
   int count=0;
   ifstream fin("rat.dat");
   if(!fin)
       {
        cout<<"File not found";
        getch();
       }
   else
       {
        while (fin.get(ch))
          {
               textcolor(15);
               h << ch;
               if (ch!=' ' && (ch<'a'||ch>'z')&&(ch<'A'||ch>'Z')&&ch!='\n')
                   {
                    count++;
                    if ((ch=='.')||(ch=='!')||(ch=='?'))
                    {
                      textcolor(14);
                      h <<"("<<"v"<<k<<"-"<<count<<")";
                      k++;
                      ch++;
                      for(a=0;a<7;a++)
                      mas[a]=count;
                      count=0;
                    }
                   }
          }
          [color=red]int i = -1;
          while( i < k )
          {
             i++;
             getch();[/color]

             for (int s=0; s<mas[7]; s++)
             {
              fin.clear();
              fin.seekg(0);
              getch();
              clrscr();
              int j=0;
              while (fin.get(ch))
                 {   for(a=0;a<7;a++)
                 {
                 if (j==i) textcolor (14);
                 else textcolor(15);
                 if(j==i&&mas[a]==s)
                      {
                      textcolor (13);
                      }
                 h<<ch;
                 s++;
                 }
                 if ((ch=='.')||(ch=='!')||(ch=='?'))
                 j++;
                 }

             }
                  }
     }
   fin.close();
   getch();

}

Автор: ratgunter 17.11.2008, 15:01
блин, не тот вариант проги дал.Помогите пожалуйста, надо 22.11.08.  сдать
вот какую прогу надо дописать:
Код

#include <iostream.h>
#include <fstream.h>
#include <conio.h>
#include <constrea.h>

void main()
{
   clrscr ();
   constream h;
   char ch=0;
   int k=1;
   int count=0;
   ifstream fin("rat.dat");
   if(!fin)
       {
        cout<<"File not found";
        getch();
       }
   else
       {
        while (fin.get(ch))
          {
               textcolor(15);
               h << ch;
               if (ch!=' ' && (ch<'a'||ch>'z')&&(ch<'A'||ch>'Z')&&ch!='\n')
                   {
                    count++;
                    if ((ch=='.')||(ch=='!')||(ch=='?'))
                    {
                      textcolor(14);
                      h <<"("<<"v"<<k<<"-"<<count<<")";
                      k++;
                      ch++;
                      count=0;
                    }
                   }
          }
          for(int i=0;i<k;i++)
             {
              fin.clear();
              fin.seekg(0);
              getch();
              clrscr();
              int j=0;
              while (fin.get(ch))
                 {
                 if (j==i) textcolor (14);
                 else textcolor(15);
                 if(j==i&&ch!=' '&&(ch<'a'||ch>'z')&&(ch<'A'||ch>'Z')&&ch!='\n')
                      {
                      textcolor (13);

                      }
                 h<<ch;
                 if ((ch=='.')||(ch=='!')||(ch=='?'))
                 j++;
                 }
              }

     }
   fin.close();
   getch();
}

Автор: DareDevil225 17.11.2008, 15:04
исправления те же самые

Автор: ratgunter 17.11.2008, 16:56
Нет, сдесь предложения выделяются как надо, а символы в предложении сразу все выделяются.Прогу которую вы мне дали ругалась на [color] или вроде того и ниче не делала, просто выводила текст на экран.помогите доделать!

Автор: DareDevil225 17.11.2008, 17:37
Цитата

Прогу которую вы мне дали ругалась на [color] или вроде того и ниче не делала, просто выводила текст на экран.


[color] - это тег этого сайта, хотел цветом выделить что изменил - почему-то не сработало  smile

Добавлено через 2 минуты и 13 секунд
тогда так:
Код

#include <iostream.h>
#include <fstream.h>
#include <conio.h>
#include <constrea.h>

void main()
{
   clrscr ();
   constream h;
   char ch=0;
   int k=1;
   int count=0;
   ifstream fin("rat.dat");
   if(!fin)
       {
        cout<<"File not found";
        getch();
       }
   else
       {
        while (fin.get(ch))
          {
               textcolor(15);
               h << ch;
               if (ch!=' ' && (ch<'a'||ch>'z')&&(ch<'A'||ch>'Z')&&ch!='\n')
                   {
                    count++;
                    if ((ch=='.')||(ch=='!')||(ch=='?'))
                    {
                      textcolor(14);
                      h <<"("<<"v"<<k<<"-"<<count<<")";
                      k++;
                      ch++;
                      count=0;
                    }
                   }
          }
          for(int i=0;i<k;i++)
             {
              fin.clear();
              fin.seekg(0);
              getch();
              clrscr();
              int j=0;
              while (fin.get(ch))
                 {
                  getch();
                 if (j==i) textcolor (14);
                 else textcolor(15);
                 if(j==i&&ch!=' '&&(ch<'a'||ch>'z')&&(ch<'A'||ch>'Z')&&ch!='\n')
                      {
                      textcolor (13);

                      }
                 h<<ch;
                 if ((ch=='.')||(ch=='!')||(ch=='?'))
                 j++;
                 }
              }

     }
   fin.close();
   getch();

}

Автор: ratgunter 17.11.2008, 18:07
не так работает.теперь текст полностью посимвольно выводится. надо чтобы при нажатии любой клавиши выделилось цветом первое предложение, затем при нажатии любой клавиши в этом предложении поочередно выделялись например все цифры и запятые.после того как все цифры и запятые выдилились, при нажатии любой клавиши должно выделиться следующее предложение, и в нем опять поочередно символы и т.д.
посмотрите еще раз пожалуйста!

Автор: DareDevil225 18.11.2008, 14:20
Код

#include <iostream.h>
#include <fstream.h>
#include <conio.h>
#include <constrea.h>

void main()
{
   clrscr ();
   constream h;
   char ch=0;
   int k=1;
   int count=0;
   ifstream fin("rat.dat");
   if(!fin)
       {
        cout<<"File not found";
        getch();
       }
   else
       {
        while (fin.get(ch))
          {
               textcolor(15);
               h << ch;
               if (ch!=' ' && (ch<'a'||ch>'z')&&(ch<'A'||ch>'Z')&&ch!='\n')
                   {
                    count++;
                    if ((ch=='.')||(ch=='!')||(ch=='?'))
                    {
                      textcolor(14);
                      h <<"("<<"v"<<k<<"-"<<count<<")";
                      k++;
                      ch++;
                      count=0;
                    }
                   }
          }
          for(int i=0;i<k;i++)
             {
              fin.clear();
              fin.seekg(0);
              getch();
              clrscr();
              int j=0;
              while (fin.get(ch))
                 {
                 if (j==i) textcolor (14);
                 else textcolor(15);
                 if(j==i&&ch!=' '&&(ch<'a'||ch>'z')&&(ch<'A'||ch>'Z')&&ch!='\n')
                      {
                      textcolor (13);

                      }
                 h<<ch;
                 if ((ch=='.')||(ch=='!')||(ch=='?'))
                 j++;
                 if( ch == '\n' )
        getch();
                 }
              }

     }
   fin.close();
   getch();


}

Автор: ratgunter 18.11.2008, 20:14
Ну не правильно работает, у вас символы синим цветом сразу все выделяются, а надо чтоб поочередно!

Автор: DareDevil225 19.11.2008, 10:24
Попробуйте так)))
Код

#include <iostream.h>
#include <fstream.h>
#include <conio.h>
#include <constrea.h>

void main()
{
   clrscr ();
   constream h;
   char ch=0;
   int k=1;
   int count=0;
   ifstream fin("rat.dat");
   if(!fin)
       {
        cout<<"File not found";
        getch();
       }
   else
       {
        while (fin.get(ch))
          {
               textcolor(15);
               h << ch;
               if (ch!=' ' && (ch<'a'||ch>'z')&&(ch<'A'||ch>'Z')&&ch!='\n')
                   {
                    count++;
                    if ((ch=='.')||(ch=='!')||(ch=='?'))
                    {
                      textcolor(14);
                      h <<"("<<"v"<<k<<"-"<<count<<")";
                      k++;
                      ch++;
                      count=0;
                    }
                   }
          }
          for(int i=0;i<k;i++)
             {
              fin.clear();
              fin.seekg(0);
              getch();
              clrscr();
              int j=0;
              bool bFlag= false;
              while (fin.get(ch))
                 {
                 if (j==i) textcolor (14);
                 else textcolor(15);
                 if(j==i&&ch!=' '&&(ch<'a'||ch>'z')&&(ch<'A'||ch>'Z')&&ch!='\n')
                      {
                      textcolor (13);
                      bFlag = true;
                      }
                 h<<ch;
                 if( bFlag ) {
                     getch();
                     bFlag = false;
                 }
                 if ((ch=='.')||(ch=='!')||(ch=='?'))
                 j++;
                 if( ch == '\n' )
        getch();
                 }
              }

     }
   fin.close();
   getch();



}

Автор: ratgunter 19.11.2008, 19:05
Да сам уже 2 месяца мучаюсь!

Автор: ratgunter 20.11.2008, 14:25
У меня сишник ругается на bool и выдает 5 ошибок(все связанны с bool). Самое интересное,что у меня в help'е ничего нет про bool.Что можно сделать?

Автор: DareDevil225 20.11.2008, 18:10
Цитата(ratgunter @ 20.11.2008,  14:25)
У меня сишник ругается на bool и выдает 5 ошибок(все связанны с bool). Самое интересное,что у меня в help'е ничего нет про bool.Что можно сделать?

Каие ошибки хоть пишет? не верю что не понимает тип bool

Добавлено через 1 минуту и 38 секунд
Сделайте int тогда)))
Код

#include <iostream.h>
#include <fstream.h>
#include <conio.h>
#include <constrea.h>

void main()
{
   clrscr ();
   constream h;
   char ch=0;
   int k=1;
   int count=0;
   ifstream fin("rat.dat");
   if(!fin)
       {
        cout<<"File not found";
        getch();
       }
   else
       {
        while (fin.get(ch))
          {
               textcolor(15);
               h << ch;
               if (ch!=' ' && (ch<'a'||ch>'z')&&(ch<'A'||ch>'Z')&&ch!='\n')
                   {
                    count++;
                    if ((ch=='.')||(ch=='!')||(ch=='?'))
                    {
                      textcolor(14);
                      h <<"("<<"v"<<k<<"-"<<count<<")";
                      k++;
                      ch++;
                      count=0;
                    }
                   }
          }
          for(int i=0;i<k;i++)
             {
              fin.clear();
              fin.seekg(0);
              getch();
              clrscr();
              int j=0;
              int Flag= 1;
              while (fin.get(ch))
                 {
                 if (j==i) textcolor (14);
                 else textcolor(15);
                 if(j==i&&ch!=' '&&(ch<'a'||ch>'z')&&(ch<'A'||ch>'Z')&&ch!='\n')
                      {
                      textcolor (13);
                      Flag = 2;
                      }
                 h<<ch;
                 if( Flag == 2) {
                     getch();
                     Flag = 1;
                 }
                 if ((ch=='.')||(ch=='!')||(ch=='?'))
                 j++;
                 if( ch == '\n' )
        getch();
                 }
              }

     }
   fin.close();
   getch();




}

Автор: ratgunter 21.11.2008, 21:04
Вы не поняли: вначале выделяется предложение, затем оно остается выделенным и в нем уже другим цветом поочереди выделяются символы.А текст никуда не исчезает,он должен оставаться!

Автор: ratgunter 5.12.2008, 23:19
Ну помогите!!!

Автор: DareDevil225 10.12.2008, 11:32
нужно
-в цикле while убрать установку необходимых цветов для символов, чтобы не выделялись
-затем переместить указатель в файле на начало
-после вашего цикла while вставить еще один, в котором уже определять необходимые цвета для символов и функцией  gotoxy(int x, int y) перемещаться по уже выведенному тексту и выводить цветной символ, после чего делать ожидание нажатия клавиши(getch()) и так далее.
 smile 

Автор: ratgunter 11.12.2008, 15:47
А можете пожалуйста дописать программу, а то реально с сентября мучаюсь.

Автор: DareDevil225 12.12.2008, 09:21
Я же описал примерный алгоритм решения, вам никак самому подумать не хочется?
На форуме вам могут подсказать что либо, помочь в решении проблемы, подкинуть идею - но писать за вас программы никто не будет (не обижайтесь, но это так), если только задача интересная и есть время чтобы с ней повозиться.
По вопросам написания программ обращайтесь туда, где делают за денюжку.

Задавайте конкретные вопросы что именно у вас не получается, тогда получите ответы на них.

Добавлено через 2 минуты и 55 секунд
Кстати, если Вы не заметили, то никто на вашу задачу даже не откликнулся, кроме меня, потому что о просьбах написать что либо никто не отвечает.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)