2016-04-12 5 views
-3

Таким образом, у меня есть этот код, мне нужно, чтобы включить в функцию:Создание функции для случайного числа 2D массива

int main(void) { 
    int i=0,seed; 
    printf("\n\nEnter seed integer value: ");    
    scanf("%d", &seed);       
    printf("\nSeed value is:%d\n\n",seed);     
    srand(seed); 



    int a[5][5];         
    int x,y; 
    printf("Matrix A:\n"); 
    for(x=0;x<5;x++) {      
     for(y=0;y<5;y++) { 
      a[x][y] = rand() %51 + (-25);    
      printf("%d ",a[x][y]); }   
     printf("\n"); } 
    printf("\n\n"); 

Так в основном, это производит 5x5 массив 2D случайных чисел. Это прекрасно работает, однако моя следующая задача применения функции к этому коду, с именем функции из:

void generate_matrices(int a[5][5]) 

Я пытался несколько раз, ближе я к успешному коду было:

#include <stdio.h> 
#include <stdlib.h> 

void generate_matrices(int a[5][5]); 

int main(void) { 
    int a, seed; 
    printf("\n\nEnter seed integer value: ");    
    scanf("%d", &seed); 
    srand(seed); 
    printf("\nSeed value is:%d\n\n",seed); 

    generate_matrices(a); 

    return 0; 
} 


void generate_matrices(int a[5][5]) { 

    int y,z; 
    printf("Matrix A:\n"); 
    for(y=0;y<5;y++) { 
     for(z=0;z<5;z++) { 
      a[y][z] = rand() %51 + (-25); } 
    printf("%d ",a[y][z]); } 
    printf("\n"); 
    } 

но это возвращает ошибку, «ожидается" Int (*) [5], но arguement имеет тип „INT“.

Все/любая помощь muchly оценена. Чтобы быть справедливым, с моей стороны, я сделал 90% кода. Это единственный бит, в котором мне нужна помощь, поэтому я могу применить его к остальной части моего кода.

Приветствия!

+1

Вы не можете отправить массив как переменную. Вам нужно отправить указатель, указывающий на его первый элемент + размер столбца + размер строки. Или просто не отправляйте его! Создайте его внутри этой функции и обработайте ее там –

ответ

0

Вы объявили a как единое целое на этой линии int a, seed;

При вызове функции с generate_matrices(a); вы передаете одно целое вместо указателя на массив. Измените свою строку декларации на int a[5][5], seed;

generate_matrices(a); передаст указатель на первый элемент в вашем массиве 5 * 5.

Вы должны действительно напечатать результаты в main, а не в функции, то вы узнаете, что массив был изменен и доступен для использования в теле вашей программы.

Вы использовали нетрадиционное размещение брекетов '}', и это затрудняет просмотр того, что принадлежит каждой части ваших петель for. У вас есть операторы печати в неправильных местах - в результате печатается только часть матрицы.

Это то, что должно быть (только результаты - в основной):

printf("Matrix\n "); 
for (y = 0; y < 5; y++) { 
    for (z = 0; z < 5; z++) { 
     printf("%d\t ", a[y][z]); 
    } 
    printf("\n"); 
} 

Если вы используете int a[5][5] и вызовите функцию с generate_matrices(a);
функция, void generate_matrices(int a[5][5]) {...} компилируется без ошибок

+0

Я вижу.Однако для печати выходной матрицы требуется другая функция: функция void generate_matrices (int a [5] [5]); просто для генерации матрицы, тогда мне нужно использовать другую функцию void print_matrix (int a [5] [5]); Итак, в моем первом наборе кодирования я встаю, я игнорирую (пока) печать матрицы, я просто не хочу, чтобы ошибки возникали при компиляции кода. –

+0

Функция 'void print_matrix (int a [5] [5]) {...}' может быть вызвана так же, как и print_matrix (a); 'и поместить в нее код печати. Также вам нужно передать начальное значение функции generate_matrix и использовать его для генерации случайных чисел. – anita2R

0
#include<stdio.h> 
#include<stdlib.h> 

void modify(int b[5][5]); 
int main() 
{ 
    srand(4562); 
    int i,j,arr[5][5]; 
    modify(arr); 
    for(i=0;i<5;i++){ 
     for(j=0;j<5;j++){ 
      printf("%d ",arr[i][j]=rand() %51 + (-26)); } 
    } 
    return 0; 
} 

void modify(int b[5][5]) 
{ 
    int i,j; 
    for(i=0;i<5;i++) { 
     for(j=0;j<5;j++) { 
      b[i][j]; } 
    } 
} 

Так что это самое близкое, что я пришел, чтобы закончить его. Он производит количество элементов, которые я хочу, также в пределах диапазона, который я хочу. Однако он не создает сетку 5x5, в которой я нуждаюсь. Где я ошибся?

EDIT: Я не собираюсь быть аккуратным на данный момент, я просто хочу, чтобы программа работала так, как я тоже хочу, и тогда я ее аккуратно подниму.

EDIT 2: Ничего, понял, что я не включил. Теперь это прекрасно. Спасибо за помощь.

Смежные вопросы