Advertisement
igorsan98

DM_LB1v20

Jan 8th, 2016
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.12 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <locale.h>
  3. #include <stdlib.h>
  4. #include <time.h>
  5. #include <stdbool.h>
  6.  
  7.  
  8. void TextMassage();//Вывод услови задачи
  9.  
  10. void CreateFile();//Генерация цепочек(слов),отбор по условию , запись в файл.
  11.  
  12. void OutputToConsloe();//Вывод с файла в консоль.
  13.  
  14. int M =15;//количество строк которые выведит программа с файла
  15.  
  16. char V [3]={'a','b','c'};//алфавит формального языка .
  17.  
  18.  
  19. main()
  20. {
  21.  
  22. TextMassage();
  23.  
  24. srand(time(NULL));
  25.  
  26. CreateFile();
  27.  
  28. OutputToConsloe();
  29. }
  30.  
  31.  
  32. void TextMassage()
  33. {
  34.  
  35. setlocale(LC_ALL,"UA");
  36.  
  37.  
  38.  
  39. printf ("Задание:\nСоздать программу на языке  С  , которая будет продуцировать \nцепочки (слова) в трехсимвольном алфавите V={a,b,c} с записью их в файл, причем\nдлина L цепочек ограничена: L1 <= L <= L2 и для каждой цепочки, отобранной в\nфайл, должно выполняться условие  < A >.Общее количество цепочек вфайле  должно быть не более M.\nУсловие  < A >:\nСодержит не менее двух символов «с», начинается на символ «а», а символ «b»\nвстречается только по два (парами)\nL1 = 5\tL2 = 10\tM = 15\n");
  40.  
  41.  
  42. }
  43.  
  44. void CreateFile()
  45. {
  46. FILE *InputFile = fopen("input.txt","w");
  47.  
  48. int counter ;//предел генерации слов
  49. int counter_c ;//счетсчик количества с
  50. int counter_db ;//cчетчик встреч b НЕ по два
  51. int counter_b;//cчетчик встреч b
  52. //нужно два счетчика  b для исключения ситуаций "bbb"
  53. bool a ;//истинность условия что а перове
  54.  
  55. for(counter =0,counter_c=0,counter_db=0,counter_b=0;counter<1024;counter++,a =false,counter_c=0,counter_db=0,counter_b=0)
  56. {
  57.  
  58. int L =5 + rand()%6;
  59.  
  60. char  Line[L];
  61.  
  62. for(int i =0 ;i<L ;i++)
  63. {
  64.  
  65. Line[i]=V[rand()%3];
  66.    
  67.  
  68. }
  69. if(Line[0]==V[0])
  70. {
  71. a=true;
  72.  
  73.  
  74. for(int i =1 ;i<L ;i++)
  75. {
  76.  
  77. if(Line[i]==V[2])
  78. {
  79. counter_c++;
  80. }
  81.    
  82.  
  83.  
  84.  
  85. if(Line[i]==V[1]&&Line[i-1]!=V[1]&&Line[i+1]!=V[1])
  86.             {
  87.  
  88. counter_db++;//abbbaac  abcbb  abbbbabca
  89. }
  90.  
  91. if(Line[i]==V[1])
  92.             {
  93.  
  94. counter_b++;//abbbaac  abcbb  abbbbabca
  95. }
  96.  
  97.  
  98. }
  99.  
  100.  
  101. }
  102. if(a==true&&counter_c>=2&&counter_db==0&&counter_b%2==0)
  103. {
  104. for(int i =0 ;i<L ;i++)
  105. if(i<L-1)
  106. fprintf(InputFile,"%c",Line[i]);
  107. else
  108. fprintf(InputFile,"%c\n",Line[i]); 
  109. }
  110.  
  111. }
  112. fclose(InputFile);
  113. }
  114. void OutputToConsloe()
  115. {
  116. FILE *InputFile = fopen("input.txt","r");
  117. char str[10];
  118. int line_counter;
  119.  
  120. for(line_counter=0;line_counter<=M;line_counter++)
  121.     {
  122.    
  123.    
  124.    
  125.     fscanf(InputFile,"%s",str);
  126.     if(line_counter>0)//пропустил 0 из-за бага ,в файл первой строкой записывается цепочка не подходящая к условию
  127.     printf("%s\n",str);    
  128.            
  129.    
  130.         }
  131.     _getch();
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement