Неполный ввод динамического массива - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Написала программу, но тут же столкнулась с трудностью. При вводе массива появляется какой-то косяк и приходится вводить множество чисел из которых в массив идут лишь некоторые...
#include<stdio.h>
#include<alloc.h>
#include<conio.h>
int main()
{int m,n,i,j,c,d,k;
int *p,*q;
c=0;d=0;
do{puts("vvedite razmeri matrici");
scanf("%d%d", &n,&m);} while(n<1 || m<1);
p=(int*)calloc(n*m,sizeof(int));
q=(int*)calloc(n,sizeof(int));
fflush(stdin);
puts("vvedite matricy posrochno");
for(i=0;i<n;i++)65
    for(j=0;j<m;j++)
    scanf("%d%d", &p[i*n+j]);
for(i=0;i<n;i++)
    {for(j=0;j<m;j++)
        {if(p[i*n+j]%2==0) c++;
        else d++;
        if(c>d) q[i]=2;
        else q[i]=1;}
    }
c=0;d=0;
for(k=0;k<n;k++)
    {if(q[k]==2) c++;
    else d++;}
puts("pervaya matritsa");
for(i=0;i<n;i++)
for(j=0;j<m;j++)
printf(" %d", p[i*m+j]);
puts("vtoraya matritsa");
for(k=0;k<n;k++) printf(" %d ",*(q+k),q+k);
printf("\nchislo chetnih elementov %d,nechetnih %d ", c,d);
return 0;
}

Решение задачи: «Неполный ввод динамического массива»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    size_t n, m;
    int** matrix;
    size_t i, j;
        
    puts("Input matrix dimensions:");
    scanf("%u %u", &n, &m);
    if((matrix = (int**) malloc(n * sizeof(int*))) == NULL)
    {
    fputs("Can't allocate memory\n", stderr);
    exit(1);
    }
    for(i = 0; i < n; ++i)
    if((matrix[i] = (int*) malloc(m * sizeof(int))) == NULL)
    {
        fputs("Can't allocate memory\n", stderr);
        exit(1);
    }
 
    for(i = 0; i < n; ++i)
    for(j = 0; j < m; ++j)
    {
        printf("[%02u][%02u] > ", i, j);
        scanf("%d", &matrix[i][j]);
    }
    
    puts("Let's print our matrix out:");
    for(i = 0; i < n; ++i, putchar('\n'))
    for(j = 0; j < m; ++j)
        printf("%-6d", matrix[i][j]);
 
    for(i = 0; i < n; ++i)
    free(matrix[i]);
    free(matrix);
    
    exit(0);
}

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

В этом коде выполняются следующие действия:

  1. Объявляются переменные:
    • size_t n, m; - для ввода размеров матрицы;
    • int** matrix; - для работы с двумерным массивом;
    • size_t i, j; - для работы с индексами матрицы.
  2. Выводится приглашение для ввода размеров матрицы.
  3. Считываются размеры матрицы.
  4. Выделяется память под матрицу и её строки.
  5. Выделяется память под элементы матрицы.
  6. Производится заполнение матрицы.
  7. Выводится приглашение для ввода элементов матрицы.
  8. Выводятся значения матрицы.
  9. Освобождается память, выделенная под матрицу и её строки.
  10. Выполняется выход из программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

9   голосов , оценка 3.778 из 5
Похожие ответы