Ir ao conteúdo
  • Cadastre-se

Erro programa telhado


Dalkrs

Posts recomendados

Escreva em linguagem C uma função denominada telhado que receba como parâmetros uma matriz Anxn e um valor inteiro e ímpar (n) que define a dimensão da matriz nxn. A função telhado deve preencher a matriz recebida Anxn como ilustrado nos exemplos abaixo. Elabore a função main() para testar a função telhado. O programa deve ler do dispositivo padrão de entrada (teclado) a dimensão n da matriz A e mostrar o resultado na tela de saída. Exemplos Para n = 5 

0 1 2 1 0

1 0 1 0 1

2 1 0 1 2

1 0 1 0 1

0 1 2 1 0

Aqui vai meu código:

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

void par_impar(int);
void matriz(int);
int main ()
{
    int tam;
    printf("Digite o tamanho da matriz, sendo este um num impar:\n");
    scanf("%d", &tam);
    par_impar(tam);
    matriz(tam);
}
void par_impar(int tam)
{
    if(tam%2==0){printf("Coloque um numero impar.\n");}
}
void matriz(int tam)
{
    int i, matriz[tam][tam], cont, cont2=0;
    for(cont=0;cont<tam;cont++)
    {
        for(i=0;i<tam;i++)
        {
            if(i<tam/2-cont)
            {
                matriz[cont][i]=i;
                printf("matrizi[%d][%d]:%d\n",tam/2,i, matriz[cont][i]=i);
                matriz[i][cont]=i;
                printf("matrizi[%d][%d]:%d\n", i, cont,matriz[i][cont]=i);
                matriz[cont+i][tam-1-i]=i;
                printf("matrizi[%d][%d]:%d\n", cont+i,tam-1-i,matriz[cont][tam-i]=i);
                matriz[tam-1-i][cont+i]=i;
                printf("matrizi[%d][%d]:%d\n\n\n", tam-1-i,cont+i,matriz[tam-i][cont]=i);
                continue;
            }
            else
            {
                matriz[cont][i]=tam-i;
                printf("matrize[%d][%d]:%d\n",  cont,i,matriz[cont][i]=tam-i);
                matriz[i][cont]=tam-i;
                printf("matrize[%d][%d]:%d\n", i,cont,matriz[i][cont]=tam-i);
                matriz[cont+i][(tam-1)-i]=tam-i;
                printf("matrize[%d][%d]:%d\n", cont+i,(tam-1)-i,matriz[cont][(tam-1)-i]=tam-i);
                matriz[tam-1-i][cont+i]=tam-i;
                printf("matrize[%d][%d]:%d\n\n\n", tam-1-i,cont+i,matriz[tam-i][cont]=tam-i);
                continue;
            }
            cont2++;
        }
    }
    for(cont=0;cont<tam;cont++)
    {
        for(i=0;i<tam;i++)
        {
            printf("%d\t", matriz[cont][i]);
        }
        putchar('\n');
    }
}

 

Link para o comentário
Compartilhar em outros sites

Cheguei nisso, se eu entendi certo o seu exercicio o meu codigo deu.

Ta cheio de gambiarra, mas foi o melhor que eu consegui rsrs.

 

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

void matriz(int n, int mtz[100][100]);
void imprime(int n, int mtz[100][100]);
int main(){
    int n, mtz[100][100];

    printf("Insira a ordem da matriz (Inteiro impar): ");
    scanf("%d", &n);
    while(n%2==0){
        printf("Insira um inteiro impar: ");
        scanf("%d", &n);
    }
    matriz(n, mtz);
    imprime(n, mtz);
}
void matriz(int n, int mtz[100][100]){
    int i, j, num, aux, num1, aux1;

    num=0;
    aux=0;
    num1=0;
    aux1=-1;
    for(i=0;i<n;i++){
        for(j=0;j<n;j++){

            if(j==1)
                aux=-1;
            if(num==0||num==n/2||j==n/2+1)
                aux*=-1;

            if(i==n/2&&j==1)
                aux=-1;

            if(aux==1)
                num++;
            else if(aux==-1)
                num--;

            mtz[i][j]=num;
        }
        if(num1==0||num1==n/2||i==n/2)
            aux1*=-1;
        if(aux1==1)
            num1++;
        else if(aux1==-1)
            num1--;

        num=num1;
        aux=0;
    }
}

void imprime(int n, int mtz[100][100]){
    int i, j;
    printf("\n\n");
    for(i=0;i<n;i++){
        for(j=0;j<n;j++){
            printf("%d  ", mtz[i][j]);
        }
        printf("\n");
    }
}

Você pode tentar entender o que eu fiz e refazer do seu jeito. Se não entender alguma parte pode falar, q eu explico.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!