Мой вложенный l oop повторяется - моделирование инфекционного заболевания - PullRequest
0 голосов
/ 05 мая 2020

это школьное задание. Я пытаюсь это сделать с 9 утра, но в процессе я потерялся. Теперь я забыл; объявляя что-то. Без разницы. Как видите, моя проблема заключается в следующем. Я подошел к этому моменту. Как вы можете видеть из разницы output1, моя программа перебирает саму себя, я попытаюсь описать это на английском sh: Так, например, он перебирает H в I, если положение выглядит следующим образом: IHH он повторяет оба H в Я, это дополнительный ход. Для лучшего понимания проверьте ожидаемый результат 1 и результат 1 Я беру

МОДЕЛИРОВАНИЕ ЗАРАЖЕННОГО ЗАБОЛЕВАНИЯ

Ваша задача - смоделировать процесс заражения инфекционным заболеванием. Окружение будет представлено в виде сетки 10x10. Каждая ячейка сетки будет содержать один из символов «H», «I» и «-», где «H» обозначает здорового человека, «I» - инфицированного человека. '-' означает, что эта ячейка никем не занята; другими словами, он пуст.

На каждом этапе моделирования (для каждого поколения) инфицированный человек заразит всех своих близких здоровых людей. Они могут заразиться только в направлении вверх, вниз, вправо и влево. Диагональное заражение невозможно.

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

При вычислении следующего поколения вы будете учитывать только состояние ПРЕДЫДУЩЕГО поколения.

ФОРМАТ ВВОДА:

После каждой строки сетки будет отображаться символ новой строки '\ n'. После чтения таблицы вы должны прочитать количество симуляций на входе.

ВХОД И ВЫВОД ОБРАЗЦА:

INPUT 1:
--IHH---I-
-H--------
----------
----H-----
----IH----
----H-----
----H-----
-H--------
---------I
-HI--H---I
1

ОЖИДАЕМЫЙ ВЫХОД 1:

--IIH---I-
-H--------
----------
----I-----
----II----
----I-----
----H-----
-H--------
---------I
-II--H---I

ВЫХОД Я ПОЛУЧИ 1

--III---I-                                                                      
-H--------                                                                      
----------                                                                      
----I-----                                                                      
----II----                                                                      
----I-----                                                                      
----I-----                                                                      
-H--------                                                                      
---------I                                                                      
-II--H---I 

ВХОД 2:

--IHH---I-
-H--------
----------
----H-----
----IH----
----H-----
----H-----
-H--------
---------I
-HI--H---I
3

ОЖИДАЕМЫЙ ВЫХОД 2:

--III---I-
-H--------
----------
----I-----
----II----
----I-----
----I-----
-H--------
---------I
-II--H---I

ВЫХОД 2 Я ПОЛУЧИ

--III---I-                                                                      
-H--------                                                                      
----------                                                                      
----I-----                                                                      
----II----                                                                      
----I-----                                                                      
----I-----                                                                      
-H--------                                                                      
---------I                                                                      
-II--H---I 

И это код, который я написал для него:

#include <stdio.h>
int main()
{
char x;    

char grid[10][10] = {0};

int i,j,n,c;

for(i = 0; i < 10; i++)
    {
        for(j = 0; j < 10 ; j++)
        {
        scanf(" %c", &x);

        grid[i][j] = x;
        }
    }
c = 1;
scanf("%d",&n);
do
{

for(i = 0; i < 10 ; i++)
{   

    for(j = 0 ; j < 10 ; j++ )
    {   
        if (grid[i][j] == 'I' && grid[i][j+1] == 'H')
        {
            grid[i][j+1] = 'I';
        }
        if (grid[i][j] == 'I' && grid[i][j-1] == 'H' && j>0)
        {
            grid[i][j-1] = 'I';
        }
        if (grid[i][j] == 'I' && grid[i+1][j] == 'H')
        {
            grid[i+1][j] = 'I';
        }
        if (grid[i][j] == 'I' && grid[i-1][j] == 'H' && i>0)
        {
            grid[i-1][j] = 'I';
        }
    }
}
c++;
}
while(c<n);
for(i = 0; i < 10; i++)
    {
        for(j = 0; j < 10 ; j++)
        {
        printf("%c",grid[i][j]);
        }
      printf("\n");  
    }
    printf("\n");

return 0;
}
 

1 Ответ

0 голосов
/ 05 мая 2020

Эта строка неверна:

for(j = 0; j < 11 ; j++)

Могу я предложить вам воздержаться от использования буквальных значений для ваших циклов и определений массивов и вместо этого использовать что-то вроде:

#define MAX_I 10
#define MAX_J 10

, тогда ваш код начинает выглядеть примерно так:

char grid[MAX_I][MAX_J] = {0};

и

for(j = 0; j < MAX_J; j++)

Также при тестировании соседних местоположений массива вам необходимо ограничить операторы проверки, подобные этому:

grid[i+1][j]

и

grid[i-1][j]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...