Перевести код с 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;
}

Объяснение кода листинга программы

  1. Включаются необходимые заголовочные файлы и
  2. Определяется функция swap, которая меняет местами значения двух указателей
  3. В функции main считывается значение переменной n с помощью scanf
  4. Выделяется память под массив указателей на int с помощью malloc
  5. В цикле for создается массив int размером n, каждый элемент массива отдельно выделяется памятью с помощью malloc
  6. Инициализируются переменные i, j, d, c, q, w, z, k со значением 0
  7. В цикле 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
  8. В цикле for, который проходит от i = 0 до n, выводится на экран каждый элемент массива v[i][j] с помощью printf
  9. В конце функции main возвращается 0, что означает успешное выполнение программы

Оцени полезность:

10   голосов , оценка 4.2 из 5