Проблемы,не могу добиться верного выполнения условия - C (СИ)
Формулировка задачи:
Создать программу на С++, которая будет продуцировать цепочки(слова) в трехсимвольном алфавите с записью их в файл, причем длина L цепочек ограничена: L1<= L <= L2 и для каждой цепочки, отобранной в файл, должно выполняться условие < A >. Общее количество цепочек в файле должно быть не более M.
Содержит не более двух символов «с», начинается на «ас», а символ «а» встречается только по одному...
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main ()
{
char a[10];
int i, b, inf, count = 0, N, countc = 0;
srand(time(NULL));
for (inf = 1; inf > 0; inf++) // Задаем бесконечный цикл для генерации комбинаций символов
{
N = 10 - rand()%7; // Задаем количество символов в строке от 4 до 10
for (i = 0; i < N; i++) // Задаем цикл, где каждому элементу строки будем присваивать значение от 0 до 2
{
b = rand()%3; // Задаем переменной b рандомное значение от 0 до 2 включительно для дальнейшей замены 0-3 на a-c
if (b == 0) // Если значение 0, ставим вместо него а
a[i] = 'a';
if (b == 1) // Если значение 1, ставим вместо него b
{
a[i] = 'b';
// Если встречается буква b, мы увеличиваем счетчик на 1
}
if (b == 2) // Если значение 2, ставим вместо него c
a[i] = 'c';
countc++;
}
if (a[0]=='a'&& a[1] == 'c') // Если на первом месте в комбинации стоит а b с, тогда
if(a[i]=='a') ///если встречается а то пишем b
{
a[i+1] = 'b';
i++;
}
if (countc >= 0 && countc <=2)///Если C появляется не больше двух раз
{
for (i = 0; i < N; i ++) // Выводим строку на экран
printf ("%c", a[i]);
printf ("\n");
count++; // Увеличиваем счетчик выведенных на экран строк на 1
if (count>10) // Когда вывели на экран 10 строк, прерываем выполнение программы
break;
}
countc=0;
}
getch();
}
....
...
Решение задачи: «Проблемы,не могу добиться верного выполнения условия»
textual
Листинг программы
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main ()
{
char a[10];
int i, b, inf, N, countc = 0,count=0,ch;
srand(time(NULL));
for (inf = 1; inf > 0; inf++)
{
N = rand()%6+4;
for (i = 0; i < N; i++)
{
b = rand()%3;
if (b == 0)
a[i] = 'a';
if (b == 1)
a[i] = 'b';
if (b == 2)
{
a[i] = 'c';
countc++;
}
if(a[0]=='a' && a[1]=='c')
if (a[i]=='a')
{a[i+1]='b';
i++;}
}
if (a[0]=='a'&&a[1]=='c')
if(countc>=0 && countc<=2)
{
for (i = 0; i < N; i ++)
cout<<a[i];
cout<<'\n';
count++;
if (count>15)
break;
}
countc = 1;
}
getch();
}
Объяснение кода листинга программы
- Объявлены переменные: char a[10]; int i, b, inf, N, countc = 0,count=0,ch;
- Инициализирован генератор случайных чисел с помощью функции srand(time(NULL));
- В цикле for (inf = 1; inf > 0; inf++) генерируется случайное число N от 4 до 6.
- Во внутреннем цикле for (i = 0; i < N; i++) генерируется случайное число b от 0 до 2.
- В зависимости от значения b, в массив a записывается одна из трех букв 'a', 'b' или 'c'.
- Если в начале массива находятся буквы 'a' и 'c', то в цикле if (a[i]=='a') выполняется условие a[i+1]='b'; i++;.
- Если в начале массива находятся буквы 'a' и 'c', то в цикле if(countc>=0 && countc<=2) выполняется условие, но его значение не указано в вопросе.
- В цикле for (i = 0; i < N; i ++) выводится значение a[i];.
- Если значение переменной count больше 15, то цикл прерывается с помощью оператора break.
- После окончания внутреннего цикла, значение переменной countc сбрасывается в 1.
- В конце программы вызывается функция getch(), которая ожидает нажатия клавиши.