Перевести код с QBasic на Си - C (СИ)
Формулировка задачи:
Надо перевести код в C#
Вот что получается но не работает
уже все перепробовал
INPUT "input n: ", n DIM a(n, n) FOR d = 2 * n - 1 TO 1 STEP -1 IF d < n THEN i = d: j = 1: c = c - 1 ELSE i = n: j = d - n + 1: c = c + 1 END IF q = -1: w = 1 IF d MOD 2 THEN SWAP i, j: SWAP q, w FOR z = 1 TO c a(i, j) = k: k = k + 1 i = i + q: j = j + w NEXT NEXT FOR i = 1 TO n: FOR j = 1 TO n PRINT USING "####"; a(i, j); NEXT: PRINT: NEXT
#include <stdio.h> void main() { int mas[6][6], i,j,c,x,q,w,k,swap1,swap2; for (x=35;x>=1;x--) { if (x<6) { i = x; j = 1; c = c - 1; } else { i = 6; j = x - 5; c = c + 1; } int q=-1, w=1,z; if (x%2==0) { i=swap1; j=swap2; i=swap2; j=swap1; q=swap1; w=swap2; q=swap2; w=swap1; } for (z=1;z<=c;z++) { mas[i][j] = k; k++; i = i + q; j = j + w; } } for (i=0;i<6;i++) { for (j=0;j<6;j++) { printf ("\t%d",mas[i][j]); } printf ("\n"); } }
очень срочно надо, завтра уже сдавать
помогите, ребят!
Решение задачи: «Перевести код с QBasic на Си»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> void swap(int *a, int *b) { int t = *a; *a = *b; *b = t; } int main(void) { int n, i, j, d, c, q, w, z, k, **v; printf("enter n: "); scanf("%d", &n); v = (int**)malloc(n * sizeof(int*)); for (i = 0; i != n; ++i) { v[i] = (int*)malloc(n * sizeof(int)); } i = j = d = c = q = w = z = k = 0; for (d = 2 * n - 1; d >= 1; --d) { if (d < n) { i = d; j = 1; --c; } else { i = n; j = d - n + 1; ++c; } q = -1; w = 1; if (d % 2) { swap(&i, &j); swap(&q, &w); } for (z = 1; z <= c; ++z) { v[i-1][j-1] = k++; i += q; j += w; } } for (i = 0; i != n; ++i) { for (j = 0; j != n; ++j) { printf("%3d ", v[i][j]); } printf("\n"); } return 0; }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы
и - Определяется функция swap, которая меняет местами значения двух указателей
- В функции main считывается значение переменной n с помощью scanf
- Выделяется память под массив указателей на int с помощью malloc
- В цикле for создается массив int размером n, каждый элемент массива отдельно выделяется памятью с помощью malloc
- Инициализируются переменные i, j, d, c, q, w, z, k со значением 0
- В цикле for, который проходит от d = 2 * n - 1 до d >= 1, выполняется следующая логика:
- Если d < n, то i = d, j = 1, c = c - 1
- Если d >= n, то i = n, j = d - n + 1, c = c + 1
- q = -1, w = 1
- Если d % 2, то меняются местами i и j, а также q и w
- В цикле for, который проходит от z = 1 до c, каждому элементу массива v[i-1][j-1] присваивается значение k++, затем i увеличивается на q, j на w
- В цикле for, который проходит от i = 0 до n, выводится на экран каждый элемент массива v[i][j] с помощью printf
- В конце функции main возвращается 0, что означает успешное выполнение программы