2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Помогите написать несложную програмку
Сообщение06.12.2005, 19:42 
Ребята помогите написать несложную програмку на СИ! Я её написал но алгоритм слишком сложный и огромный! Для хранения строк я использовал массив! Как написать програмку по проще? Помогите а!

Задачка: словом назовём всякую последовательность букв латинского алфавита длины не более 20. Предложением- всякую последовательность не более 30 слов, разделённых одним или несколькими пробелами! Концом предложения является символ ? , . , ! (P.S. запятая не является концом предложения)

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

Уважаемый Kaktus, Drakosha, CHUVAK или как вас еще там. Было бы очень здорово, если бы вы
1) зарегистрировались
2) завели себе одну тему в Математике и одну тему в Computer Science, и в них бы писали свои задачи
3) перестали использовать большие буквы и восклицательные знаки (в других ваших сообщениях, не в этом). Такое эмоциональное выделение текста на форумах называется "крик" и допускается только если текст сообщения имеет большую важность для форумчан. Вам не следует привлекать внимание к своим сообщениям таким способом.
Dan_Te

  
                  
 
 
Сообщение06.12.2005, 20:37 
поместите где нибудь свое решение (лучше на каком-нибудь fileshare). посмотрим, попробуем помочь.

  
                  
 
 
Сообщение06.12.2005, 20:58 
Вот моя прога большая правда? P.S. почему-то некоторые операторы заменились смайликами!!!

Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define Esc 27
#define MAX_STRING 30
#define MAX_WORD 20
int k,n,t,f,M_temp=0,run=0,SS=0,error=0,TEMP=0;
char Str[MAX_STRING][MAX_WORD+2],Sp[MAX_STRING],scan_spase=0;

void ReadData()
{
   char ch,er;
   int i,j=0,x,y,s,detect=0,o;
   for(s=0;s<MAX_STRING;s++)
        Sp[s]=0;
   j=0;
   printf("\n\n");
   printf("******************** The program is started *********************\n\n");
   printf("Please inter the sentences:\n");
   while(j<MAX_STRING)
   {
      for(i=1;i<(MAX_WORD+3);i++)
      {
         if(i==(MAX_WORD+2))
             {
                    x=wherex();
               y=wherey();
               printf("\n\aError 001: Length of a word exceeds norm!");
               gotoxy((x-1),y);
               printf(" ");
               gotoxy((x-1),y);
               i--;
             }
         if(j==MAX_STRING)
         {


                    x=wherex();
               y=wherey();
               printf("\n\aError 002: Is long the sentences above than norm! Enter '!' or '?' or '.'!");
               gotoxy((x-1),y);
               printf(" ");
               gotoxy((x-1),y);
               j--;
               while(er!='.' && er!='?' && er!='!')
                                        {
                  er=getche();
                  printf("\b");
                  if(er=='.' || er=='?' || er=='!')
                  {
                     ch=er;
                                               
                     if(ch=='!')
                                                        {
                                                           printf("!");
                        M_temp=1;
                                                        }
                     if(ch=='.')
                                                        {
                                                           printf(".");
                        M_temp=2;
                                                        }
                     if(ch=='?')
                                                        {
                        printf("?");
                        M_temp=3;
                                                        }
                                                        goto M;
                                                }
                  if(er=='\b')
                                      {
                                              y=wherey();
                     i=0;
                     j=0;
                     gotoxy(1,y);
                     printf("                                                                            ");
                                                        printf("\n                                                                          ");
                                              gotoxy(1,y);
                                                        break;
                  }



                                        }


                        }

         ch=getche();

         if((ch==' ') && (run==0))
         {                       
            scan_spase=1;
                                SS=1;
                                Sp[j]--;
                        }
                        run=1;

                       
         if((ch>='A')&&(ch<='z')&&(ch!=Esc)||(ch==' ')||(ch=='!')||(ch=='.')||(ch=='?'))
         {
                       
            if(ch=='!')
            M_temp=1;

            if(ch=='.')
            M_temp=2;

            if(ch=='?')
            M_temp=3;


          M:   y=wherey();
                                x=wherex();
            gotoxy(1,y+1);
            printf("                                                                                                  ");
            gotoxy(x,y);

                                if((ch!=' ') && (ch!='!') && (ch!='.') && (ch!='?'))
            Str[j][i]=ch;

            if(ch==' ')
            {
                Sp[j]++;
                                    if((detect!=1) && (scan_spase!=1))
                                    {
                                        Str[j][i]=0;
                         i=0;
                    j+=1;
               detect=1;
                                    }
                else                                 
                                    i=0;
                                   
            }
            else
                                {
                                   detect=0;
                                   scan_spase=0;
                                }

                   if((ch=='!')||(ch=='.')||(ch=='?'))
            {
               
                                        if((Str[j][1]>='A') && (Str[j][1]<='z'))
               {}
                                   else
                                        {
                                        TEMP=1;
                                        }

                                       t=j+1;
                     break;
            }
         }
         else
         {
            if(ch==Esc)
            {
                    y=wherey();
                                   x=wherex();                   
               gotoxy(x-1,y);
               printf(" ");
               printf("\n\n*********************The program is closed***********************");
                                        error=1;                                       
               return;
            }
            if(ch=='\b')
                                {
                    for(o=1;o<=j;o++)
                                        Sp[o]=0;

               for(o=0;o<j+1;o++)
                    {
                  for(i=1;Str[j][i]!=0;i++)
                  Str[o][i]=0;
               
               }

                                        y=wherey();
               i=0;
               j=0;
               gotoxy(1,y);
               printf("                                                                                                                                                          ");
                                        gotoxy(1,y);

            }
                                else
                                {
               x=wherex();
               y=wherey();
               printf("\a\nError 003: You should enter only latin letters!");
               gotoxy((x-1),y);
               printf(" ");
               gotoxy((x-1),y);
               i--;
               continue;
                                 }

         }


      }
        break;
   }
   printf("\n");

}



void main()
{
   int K,N,incorrect_size,number,incorrect_number,i,j,temp=0,a=0,b=0,max,min,MAX,MIN;
   char temp1[MAX_WORD+2];
   clrscr();

   ReadData();

   Sp[t-1]++;       
      if(error!=1)
      {
   printf("\n**************The sentences is entered successfully**************");
   printf("\n\nEnter whole 'K' and 'N' for replacement of words in sentences:");
      }

if(error!=1)
{
    while(1)
    {
   for(;;)               
        {
           incorrect_number=0;
            printf("\nPlease, inter K=");
             fflush(stdin);
       if((scanf("%d.%d",&K,&incorrect_number))==0)
       {
              printf("Error 001: you have intered not number!\n");
              continue;
       }
       else
       {
              if((K<1)||(K>(t-TEMP)))
              {
         printf("Error002:  0 < K <= %d\n",(t-TEMP));
          continue;
              }
              else
              {
                 if(incorrect_number!=0)
                      {
                  printf("\nError003: you have intered not an integer number!\n");
                  continue;
                 }
                 else
                      break;
                   }
       }
   }


   
   for(;;)
        {
      incorrect_number=0;
            printf("Please, inter N=");
             fflush(stdin);
       if((scanf("%d.%d",&N,&incorrect_number))==0)
       {
              printf("Error 001: you have intered not number!\n");
              continue;
       }
       else
       {
              if((N<1)||(N>t-(TEMP)))
              {   
             printf("Error002:  0 < N <= %d\n",(t-TEMP));
             continue;
              }
              else
              {
                 if(incorrect_number!=0)
                      {
                  printf("\nError003: you have intered not an integer number!\n");
                  continue;
                 }
                 else
                      break;
                   }
       }
   }
       

     if(K==N)
     printf("\nThe incorrect data. Try again.");
     else
     break;

     }


   printf("\n****************The entered data are accepted********************\n\n");
   printf("The resulting sentences:\n");
   for(i=1;Str[K-1][i]!=0;i++)
   a++;
        for(i=1;Str[N-1][i]!=0;i++)
        b++;

   if(a>b)
        {
      max=a;
      min=b;
                MAX=K;
      MIN=N;
   }
   else
   {
      max=b;
      min=a;
      MAX=N;
      MIN=K;
        }



        for(i=1;i<=max;i++)
        temp1[i]=Str[MAX-1][i];

   for(i=1;i<=min;i++)
   Str[MAX-1][i]=Str[MIN-1][i];

   for(i=1;i<=max;i++)
        Str[MIN-1][i]=temp1[i];

        Str[MAX-1][min+1]=0;



          if(SS!=1)
        {
      for(j=0;j<t;j++)
           {
         for(i=1;Str[j][i]!=0;i++)
         printf("%c",Str[j][i]);
               while(temp<Sp[j+1])
                   {
                             printf(" ");
                           temp++;
                   }       
                   temp=0;
      }
   }
   else
   { 
      for(j=0;j<t;j++)
           {
         while(temp<Sp[j])
                   {
                             printf(" ");
                           temp++;
         }
         for(i=1;Str[j][i]!=0;i++)
         printf("%c",Str[j][i]);
                   temp=0;
      }
        }



               if(M_temp==1)
               printf("!");
                                         
               if(M_temp==2)
               printf(".");

               if(M_temp==3)
               printf("?");
             printf("\n\n***************The program is successfully executed**************");
             printf("\n\n\aPress any key for closing the program!\n");
                       getche();

  }
}

  
                  
 
 
Сообщение07.12.2005, 01:43 


27/11/05
183
Северодонецк
Если считать, что предложение вводится в виде одной записи с консоли,
могу предложить следующее:

код: [ скачать ] [ спрятать ]
Используется синтаксис C
#include <stdio.h>

#define MAX_LEN_WORD  20
#define MAX_CNT_WORD  30
#define LEN_BUF       1000

char  buf[LEN_BUF + 1];

int main(int argc, char* argv[])
{
  char  c, *s, *begin, b_N, b_K, e_N, e_K;
  int   nword, N, K, tmp;
  char  *begin_K, *end_K, *begin_N, *end_N;

  nword = 0;
  begin_K = end_K = begin_N = end_N = NULL;

  // Вввод чисел N и K
  printf("Enter N,K: ");
  gets(buf);
  sscanf(buf, "%d %d", &N, &K);
  if(N < 1 || N > MAX_CNT_WORD || K < 1 || K > MAX_CNT_WORD)
  {
    printf("\nBad Param N,K\n");
    return(0);
  }

  // Отсортируем N и K в порядке возрастания
  if(N > K)
  {
    tmp = N;
    N = K;
    K = tmp;
  }

  // Вввод предложения
  printf("Enter Statement:\n");
  gets(s = buf);

  for(;;)
  {
    // Не слишком ли много слов в предложении?
    if(++nword > MAX_LEN_WORD)
    {
      printf("Error Limit Word\n");
      return(0);
    }

    // Поиск начала очередного слова
    // Для этого игнорируем все пустые символы
    while((c = *s) == ' ' || c == '\t' || c == '\n')
      ++s;

    // Больше нет слов?
    if(c == 0)
    {
      printf("Bad End Statements\n");
      return(0);
    }

    // Фиксируем начало слова
    begin = s;

    // Слово должно начинаться с латинской буквы
    if(!(c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z'))
    {
      printf("Bad Word %d\n", nword);
      return(0);
    }

    // Пройдемся по английским буквам, пока они не закончатся...
    while((c = *++s) >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z')
      ;

    // Не слишком ли длинное слово получилось?
    if(s - begin > MAX_LEN_WORD)
    {
      printf("Error Max Len Word %d\n", nword);
      return(0);
    }

    // Сохраним координаты начала и конца слова, если порядок
    // этого слова совпадает с N или K
    if(nword == N)
    {
      begin_N = begin;
      end_N = s;
    }
    else if(nword == K)
    {
      begin_K = begin;
      end_K = s;
    }

    // А не закончилось ли все предложение?
    if(c == '.' || c == '?' || c == '!')
    {
      // В этом случае после ?.! могут следовать только пустые символы
      while((c = *++s) == ' ' || c == '\n' || c == '\t')
        ;

      // Встретился не пустой символ?
      if(c)
      {
        printf("Bad End Statements\n");
        return(0);
      }
      break;
    }

    // Слово должно заканчиваться пустым символом
    if(c != ' ' && c != '\t' && c != '\n')
    {
      printf("Bad Word %d\n", nword);
      return(0);
    }
  }

  // А есть ли в нашем предложении слова с номерами N и K?
  if(begin_K == NULL || end_K == NULL || begin_N == NULL || end_N == NULL)
  {
    printf("No Word N or K\n");
    return(0);
  }

  // А теперь самое простое - обменять местами слова N и K

  // Если N и K совпадают, то ничего делать не надо
  if(N == K)
  {
    printf("\n%s\n", buf);
    return(0);
  }

  // Сохраним символы, которыми начинаются и заканчиваются переставляемые слова
  b_N = *begin_N;
  b_K = *begin_K;

  e_N = *end_N;
  e_K = *end_K;

  // Запишем туда нули
  *begin_N = *begin_K = *end_N = *end_K = 0;

  // А теперь печать
  printf("\n%s%c%s%c%s%c%s%c%s\n",
    buf,
    b_K, begin_K + 1,
    e_N, end_N + 1,
    b_N, begin_N + 1,
    e_K, end_K + 1);

  return 0;
}

 Профиль  
                  
 
 
Сообщение07.12.2005, 01:57 


27/11/05
183
Северодонецк
В тексте программы символы точка с запятой и вслед за ней правая круглая скобка
превратились в смайлик - там должен быть бесконечный цикл for

---
Исправил. (dm)

 Профиль  
                  
 
 
Сообщение07.12.2005, 07:39 
Спасибо за прогу! Но char buf[LEN_BUF + 1]; как я понял есть глобальная переменная верно?

  
                  
 
 
Сообщение07.12.2005, 14:37 


27/11/05
183
Северодонецк
Точнее - глобальный массив символов

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group