Программа, типа жизни колонии: нужно сделать меньше отступы (или убрать их) - C (СИ)
Формулировка задачи:
#define _CRT_SECURE_NO_WARNINGS #include "stdio.h" #include "stdlib.h" #include "conio.h" int **inp_mtx(int); void rand_mtx(int **, int, int); void out_mtx(int, int **); void f_out_mtx(FILE *, int, int **); void main() { int n, ch, ch1, a, b, i, j, x, it = 0; int alive = 0, neighbors = 0; int **coloniya; FILE *fptr; if ((fptr = fopen("rezult.txt", "w")) == NULL) { printf("\nNe mozhu vidkryty fajl"); exit(1); } printf("Vvedit rozmir colonii\n"); printf("rozmir = "); scanf("%d", &n); coloniya = inp_mtx(n); printf("--------------------------------------\n"); printf("\nVvedit sposib zadannya kolonii:\n"); printf(" Vruchnu - natysnit 1\n"); printf(" Avtomatychno - natysnit 0\n"); printf("Zrobit vybir [1/0]... "); scanf("%d", &ch); printf("--------------------------------------\n"); if (!ch) { printf("\nVvedit bud-yake chyslo vid %d do %d: ", n + 10, n*n); scanf("%d", &x); rand_mtx(coloniya, n, x); } else { printf("\nVvedit pozycii, de budut znahodytys klityny\n"); printf("(napryklad: 3 3, 7 1, 2 5...)\n"); while (ch != 'n') { scanf("%d%d", &a, &b); coloniya[a][b] = 1; alive++; printf("continue? [y/n] "); ch = getchar(); printf("\n"); } } printf("--------------------------------------\n"); printf("\nPochatkova koloniya\n"); out_mtx(n, coloniya); printf("--------------------------------------\n\n"); _getch(); alive = 0; do { alive = 0; for (i = 1; i <= n; i++) { for (j = 1; j <= n; j++) { if (coloniya[i - 1][j] == 1) neighbors++; if (coloniya[i - 1][j + 1] == 1) neighbors++; if (coloniya[i][j + 1]) neighbors++; if (coloniya[i + 1][j + 1] == 1) neighbors++; if (coloniya[i + 1][j]) neighbors++; if (coloniya[i + 1][j - 1] == 1) neighbors++; if (coloniya[i][j - 1]) neighbors++; if (coloniya[i - 1][j - 1] == 1) neighbors++; if (coloniya[i][j]) { if (neighbors <= 1) coloniya[i][j] = 0; if (neighbors>3) coloniya[i][j] = 0; if ((neighbors == 2) || (neighbors == 3)) coloniya[i][j] = 1; } else { if (neighbors == 3) coloniya[i][j] = 1; else coloniya[i][j] = 0; } if (coloniya[i][j]) alive++; fprintf(fptr, "i=%d j=%d neighbors=%d alive=%d\n", i, j, neighbors, alive); f_out_mtx(fptr, n, coloniya); neighbors = 0; } } it++; out_mtx(n, coloniya); printf("Iteraciya %d, kilkist zhyvyh klityn %d\n", it, alive); printf("--------------------------------------\n\n"); fprintf(fptr, "Iteraciya %d, kilkist zhyvyh klityn %d\n", it, alive); fprintf(fptr, "--------------------------------------\n\n"); ch1 = _getch(); if (ch1 == 'e') break; } while (alive != 0); printf("Vyhid z programy\n"); fclose(fptr); } /********************** Funkcii *******************************/ int **inp_mtx(int rozm) { int i, **m; m = (int**)calloc((rozm + 2), sizeof(int*)); for (i = 0; i<(rozm + 2); i++) m[i] = (int*)calloc((rozm + 2), sizeof(int)); return m; } void out_mtx(int rozm, int **m) { int i, j; for (i = 1; i <= rozm; i++) { for (j = 1; j <= rozm; j++) printf("%3d ", m[i][j]); printf("\n\n"); } printf("\n"); } void f_out_mtx(FILE *fp, int rozm, int **m) { int i, j; for (i = 1; i <= rozm; i++) { for (j = 1; j <= rozm; j++) fprintf(fp, "%3d ", m[i][j]); fprintf(fp, "\n\n"); } fprintf(fp, "\n"); } void rand_mtx(int **mtx, int rozm, int max) { int i; for (i = 0; i<max; i++) mtx[1 + rand() / (RAND_MAX / rozm)][1 + rand() / (RAND_MAX / rozm)] = 1; }
Решение задачи: «Программа, типа жизни колонии: нужно сделать меньше отступы (или убрать их)»
printf("%c ", m[i][j]);
Объяснение кода листинга программы
В данном коде выполняется печать содержимого массива m, который представляет собой двумерный массив (матрицу). Печать происходит построчно, то есть сначала выводятся все элементы первой строки, затем все элементы второй строки и так далее. Каждый элемент массива представлен в виде символа, который выводится на экран через функцию printf. Между элементами массива и символами, обозначающими начало и конец строки, происходит обмен символами, который позволяет отображать массив в виде таблицы. В данном случае, чтобы отобразить массив, необходимо использовать два вложенных цикла. Первый цикл идет по строкам массива, а второй - по столбцам текущей строки. Номер элемента массива определяется с помощью индексов i и j. При этом индексы начинаются с 0, а не с 1. Таким образом, код выполняет печать символов из массива m, разделенных пробелами, с переходом на новую строку после каждого элемента.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д