Ir ao conteúdo
  • Cadastre-se
Grace Gomes

C O que está faltando no código

Recommended Posts

Citação

#include<stdio.h>
#include<stdlib.h>>
#define matriz[5][5]


 main(){
int matriz[5][5];
int l,c,p,s;
int matriz[5][5];

for(l=1;l<5;l++)
  printf("digite a linha:\n");
  scanf("%d",&l);
  for(c=1;c<5;i++)
   scanf("%d",&matriz[5][5]);
   
   somadiag(matriz,p,s);
   printf("a soma da diagonal principal e:",p);
   printf("a soma da diagonal secundaria e:",s);
   
   

}

void somadiag(matriz [5][5])
{

int i,j,sdp=0,sdc=0;

for(i=1;i<5;i++)
   for(j=1;i<5;j++)
       if(i=j)
       sdp=sdp+matriz[5][5];
        if(i+j=6)
        sdc=sdc+matriz[5][5];
   

}

O exercício é o seguinte:

 

Escreva uma procedure que receba por parametro uma matriz 5x5 e forneça como saída (por parâmetros) a soma dos elementos da diagonal principal e a soma dos elementos da diagonal secundária. Faca um programa que use a procedure.

 

 

Porém quando eu vou rodar dá o seguinte erro:[Note] in expansion of macro 'matriz'.

Já procurei no google mas não entendo no que estou errando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem vários problemas...

 

- Tem um #define matriz[5][5] que é desnecessário, não deveria estar aí.

 

- Em C sempre se declara algo primeiro para depois usá-lo, então a função somadiag() deveria estar antes da função main(), pois ela é usada dentro do main().

 

- A função main() deve ser do tipo inteiro ( int main() { ), e coloque return 0; na última linha do main() para que o programa retorne 0 para o sistema quando for finalizado, informando que o programa foi encerrado corretamente.

 

- A função somadiag() foi definida para receber apenas 1 parâmetro, a matriz[5][5], e não foi colocado o tipo da matriz (int), mas o enunciado pede que a função tenha 3 parâmetros, ou seja a matriz e as duas somas das diagonais principal e secundária.

 

- Matrizes e vetores definidos com uma dimensão N tem índices indo de 0 até N-1, ou seja, int vetor[5]; tem índices indo de 0 até 4, e int matriz[5][4]; tem índices de linhas indo de 0 até 4 e índices de colunas indo de 0 até 3. O seu programa declara int matriz[5][5]; e depois tenta acessar a posição matriz[5][5] que não existe pois os índices das linhas e colunas vão apenas de 0 até 4, o que vai causar um erro no programa.

 

- Nos ciclos for tem variáveis erradas/trocadas sendo incrementadas ou sendo comparadas.

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

@isrnick Então pelo o que você disse tenho que  por matriz[4][4] ,é isso ?

 

Eu coloquei a função antes do main e agora ta dando erro no printf .

Compartilhar este post


Link para o post
Compartilhar em outros sites
6 minutos atrás, Grace Gomes disse:

@isrnick Então pelo o que você disse tenho que  por matriz[4][4] ,é isso ?

 

 

Você tem que acessar todas as posições da matriz, ou seja faz i e j variarem de 0 até 4 (usando 2 ciclos for um dentro do outro) e usa matriz[ i ][ j ] para acessar as posições.

adicionado 5 minutos depois

Por exemplo:

 

int i, j, matriz[5][5];

for (i = 0; i < 5; i++){
    for (j = 0; j < 5; j++){
        matriz[i][j] = 0;
    }
}

Colocaria o valor 0 em todas as posições da matriz.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Grace Gomes Ola! 

Tens dificuldades conceituais que não deverias ter, este site:

https://www.cprogressivo.net/2014/01/Apostila-de-C-Ponteiro-Vetor-Matriz-String.html fornece, de graça, bons resumos que ajuda no entendimento. Leia !!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×