Ir ao conteúdo

Posts recomendados

Postado

P16) Escreva um programa em linguagem C que constrói uma matriz de sequência numérica em zigzag (conforme o exemplo abaixo). O programa deve ler do dispositivo padrão de entrada o número de linha e colunas da matriz. O programa deve ler vários pares de linhas e colunas e encerrar as leituras quando o usuário digitar o par 0,0 para linha e coluna. Abaixo um exemplo de entrada e saída do programa: Digite o numero de linhas e colunas da matriz: 3 4 A matriz zig-zag de tamanho 3x4 é: 1 2 3 4 8 7 6 5 9 10 11 12 Digite o numero de linhas e colunas da matriz: 0 0 O algoritmo deve estar contido no arquivo "zigzag.c".

Deve imprimir do seguinte modo;

1 2 3 4

8 7 6 5

9 10 11 12

 

preciso de ajuda com o codigo. Obrigado.

adicionado 0 minutos depois
agora, Pedro Henrique Faria Teixe disse:

P16) Escreva um programa em linguagem C que constrói uma matriz de sequência numérica em zigzag (conforme o exemplo abaixo). O programa deve ler do dispositivo padrão de entrada o número de linha e colunas da matriz. O programa deve ler vários pares de linhas e colunas e encerrar as leituras quando o usuário digitar o par 0,0 para linha e coluna. Abaixo um exemplo de entrada e saída do programa: Digite o numero de linhas e colunas da matriz: 3 4 A matriz zig-zag de tamanho 3x4 é: 1 2 3 4 8 7 6 5 9 10 11 12 Digite o numero de linhas e colunas da matriz: 0 0 O algoritmo deve estar contido no arquivo "zigzag.c".

Deve imprimir do seguinte modo;

1 2 3 4

8 7 6 5

9 10 11 12

 

preciso de ajuda com o codigo. Obrigado.

O codigo e em C.

 

Postado
2 horas atrás, Pedro Henrique Faria Teixe disse:

preciso de ajuda com o codigo

         Boa tarde, @Pedro Henrique Faria Teixe

         Você não conseguiu se quer esboçar nenhuma linha de código para solução de problema?

         Seria interessante que sim, assim teríamos por onde começar o estudo da resolução.

 

__________________________________

Postado

eu tentei fazer do seguinte modo

for(i=0;i<n;i++){

for(j=n-1;j>0;j--){

     printf("%d",matriz[j]);

    } 

}

isso para tentar imprimir em zigzag

 

esse exercicio caiu em uma prova para eu demonstrar como sairia no prompt, porém eu n me lembro do codigo e estou tentando recriar para estudar mais sobre.

Postado

Pra te ajudar eu vou reutilizar a resposta que eu postei nesse tópico que envolvia um problema parecido:

 

Vamos usar por exemplo de uma matriz 5 x 6 (então L = 5 e C = 6). Nesse caso as coordenadas da matriz serão:
 

00  01  02  03  04  05
10  11  12  13  14  15
20  21  22  23  24  25
30  31  32  33  34  35
40  41  42  43  44  45

E a matriz deverá ser percorrida primeiro de 00 até 05, aí desce para 15 e percorre o caminho inverso na linha até 10, depois desce para 20 e assim por diante...

 

Podemos analisar esse comportamento em zigzag separando linhas e colunas...

 

Considerando apenas as linhas o caso é simples pois a matriz sempre é percorrida num único sentido, de cima para baixo, logo o valor é sempre incrementado, indo de 0 a 4 (ou no caso geral de 0 até L-1).

 

Quando consideramos as colunas vemos que o sentido percorrido é invertido a cada linha, ou seja, as coordenadas das colunas vão de 0 a 5 inicialmente, mas de 5 a 0 na linha seguinte, e de 0 a 5 novamente na linha seguinte, e assim por diante. Podemos então observar que nas linhas 0, 2 e 4 as coordenadas irão de 0 a 5, enquanto nas linhas 1 e 3  elas irão de 5 a 0, e daí fica fácil observar um padrão: ou seja, se a linha é par deseja-se percorrer as colunas de 0 até 5 (generalizando: 0 até C-1), e se a linha for ímpar (= não for par) deseja-se percorrer as colunas de 5 até 0 (generalizando: C-1 até 0).

 

Logo, a lógica do caminho percorrido em zigzag na matriz será algo do tipo:

para linhas indo de 0 até L-1:
    se a linha atual for par:
        para colunas indo de 0 até C-1:
            <lógica>
        fim do para
    senão:
        para colunas indo de C-1 até 0:
            <lógica> 
        fim do para
    fim do se
fim do para

 

  • Curtir 2
Postado

Não Mauro. Poderia me mostrar?

adicionado 3 minutos depois
2 horas atrás, isrnick disse:

Pra te ajudar eu vou reutilizar a resposta que eu postei nesse tópico que envolvia um problema parecido:

 

Vamos usar por exemplo de uma matriz 5 x 6 (então L = 5 e C = 6). Nesse caso as coordenadas da matriz serão:
 


00  01  02  03  04  05
10  11  12  13  14  15
20  21  22  23  24  25
30  31  32  33  34  35
40  41  42  43  44  45

E a matriz deverá ser percorrida primeiro de 00 até 05, aí desce para 15 e percorre o caminho inverso na linha até 10, depois desce para 20 e assim por diante...

 

Podemos analisar esse comportamento em zigzag separando linhas e colunas...

 

Considerando apenas as linhas o caso é simples pois a matriz sempre é percorrida num único sentido, de cima para baixo, logo o valor é sempre incrementado, indo de 0 a 4 (ou no caso geral de 0 até L-1).

 

Quando consideramos as colunas vemos que o sentido percorrido é invertido a cada linha, ou seja, as coordenadas das colunas vão de 0 a 5 inicialmente, mas de 5 a 0 na linha seguinte, e de 0 a 5 novamente na linha seguinte, e assim por diante. Podemos então observar que nas linhas 0, 2 e 4 as coordenadas irão de 0 a 5, enquanto nas linhas 1 e 3  elas irão de 5 a 0, e daí fica fácil observar um padrão: ou seja, se a linha é par deseja-se percorrer as colunas de 0 até 5 (generalizando: 0 até C-1), e se a linha for ímpar (= não for par) deseja-se percorrer as colunas de 5 até 0 (generalizando: C-1 até 0).

 

Logo, a lógica do caminho percorrido em zigzag na matriz será algo do tipo:


para linhas indo de 0 até L-1:
    se a linha atual for par:
        para colunas indo de 0 até C-1:
            <lógica>
        fim do para
    senão:
        para colunas indo de C-1 até 0:
            <lógica> 
        fim do para
    fim do se
fim do para

 

Amigo, conseguir recriar algumas partes do programa, porém n do conseguindo criar a linha inversa, eu separei as linhas pares e impares, mas n sei como inverter no else a linha impar, eu poderia usar um for dentro do else para imprimir somente a linha invertida?

este e meu codigo:

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

int main(){
    int m[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12,13};
    int i,j,count = 0,l=3,c=4;

          for(i=0;i<l;i++){
            for(j=0;j<c;j++){
                    if(i%2 == 0) printf("%d",m[j]);
                else printf("%d ",m[j]);

            }
            printf("\n");
          }
return 0;
}
 

adicionado 9 minutos depois
19 minutos atrás, Mauro Britivaldo disse:

@Pedro Henrique Faria Teixe Em seu curso, ou por conta própria, estudou o uso de funções para

resolução de problemas ?

 

" Dividir para conquistar "

         (O príncipe, Maquiável)

 

____________________________

 

adicionado 9 minutos depois

Mauro, você tinha perguntado sobre o codigo, consegui chegar a isso.

 

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

int main(){
    int m[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12,13};
    int i,j,count = 0,l=3,c=4;

          for(i=0;i<l;i++){
            for(j=0;j<c;j++){
                    if(i%2 == 0) printf("%d ",m[j]);
                else for(i=0;i<l-1;i++){
                    for(j=c-1;j>=0;j--){
                        printf("%d ",m[j]);
                    }
                    printf("\n");
                }

            }
            printf("\n");
          }
return 0;
}
 

Postado

Sempre use o tag CODE, apertando o botão <> no topo do campo de resposta, para postar códigos. Assim você mantém a formatação dele e evita que o autocorretor do fórum faça alterações no texto do seu código.

 

Aqui eu fiz o código:

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

int main(){
    int m[3][4];
    int i,j,count = 0,l=3,c=4;
    
    //Atribui os valores para a matriz:
    for(i=0;i<l;i++){ //linhas de 0 até L-1
        if(i%2 == 0){  //se for par
            for(j=0;j<c;j++){  //colunas de 0 até C-1
                count++;
                m[i][j] = count;
            }
        } else { //se for ímpar
            for(j=c-1;j>=0;j--){  //colunas de C-1 até 0
                count++;
                m[i][j] = count;
            }
        }
    }
    
    //Imprime os valores da matriz:
    for (i=0;i<l;i++){
        for (j=0;j<c;j++){
            printf("%d ", m[i][j]);
        }
        printf("\n");
    }
    return 0;
}

Note que ainda falta adaptar o código para aceitar matrizes de dimensões diferentes de 3 x 4, com as dimensões sendo digitadas pelo usuário, e fazer o programa acabar quando a dimensão digitada for 0 x 0.

  • Curtir 1
Postado
31 minutos atrás, isrnick disse:

Sempre use o tag CODE, apertando o botão <> no topo do campo de resposta, para postar códigos. Assim você mantém a formatação dele e evita que o autocorretor do fórum faça alterações no texto do seu código.

 

Aqui eu fiz o código:


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

int main(){
    int m[3][4];
    int i,j,count = 0,l=3,c=4;
    
    //Atribui os valores para a matriz:
    for(i=0;i<l;i++){ //linhas de 0 até L-1
        if(i%2 == 0){  //se for par
            for(j=0;j<c;j++){  //colunas de 0 até C-1
                count++;
                m[i][j] = count;
            }
        } else { //se for ímpar
            for(j=c-1;j>=0;j--){  //colunas de C-1 até 0
                count++;
                m[i][j] = count;
            }
        }
    }
    
    //Imprime os valores da matriz:
    for (i=0;i<l;i++){
        for (j=0;j<c;j++){
            printf("%d ", m[i][j]);
        }
        printf("\n");
    }
    return 0;
}

Note que ainda falta adaptar o código para aceitar matrizes de dimensões diferentes de 3 x 4, com as dimensões sendo digitadas pelo usuário, e fazer o programa acabar quando a dimensão digitada for 0 x 0.

Sim amigo,  porém, eu so queria adquirir o conhecimento de percorrer ao contrario a matriz, muito obrigado.

  • Curtir 1
Postado
12 minutos atrás, Pedro Henrique Faria Teixe disse:

Sim amigo,  porém, eu so queria adquirir o conhecimento de percorrer ao contrario a matriz, muito obrigado.

Sim, desculpe se postei demais da solução, foi o melhor jeito que consegui pensar pra explicar melhor, fazendo o código propriamente e colocar comentários.

  • Curtir 1
Postado

        Boa tarde, Todos

        Solução apresentada @isrnick está excelente.

 

        Vamos deixar o software +completo, e servir o post como futura referência.

Open Software, aberto para edição e compartilhamento.

/**
 * \author     Mauro Britivaldo
 * \date       21-Dez-2016
 * Linguagem:  C'11
 * Editor:     Code::Blocks 16.01 GNU GCC Compiler
 *
 * breve descrição.
 *
 */

//################## Referências Bibliográficas ########################//

#include <stdio.h> //< printf(  ...  ); scanf( ... );

//##################    Protótipos de Função    ########################//

int frente( unsigned int col, int vetor[], int val );
int tras( unsigned int col, int vetor[], int val );
int print_matriz( unsigned int lin, unsigned int col, int matriz[][col] );


int main( void )
{
    unsigned int lin, col;

    printf( "*** Matriz de sequencia Zigzag Software \n" );
    printf( "[#] Digite o numero de linhas e colunas da matriz: " );
    scanf( " %u%u", &lin, &col );

    while( lin && col )
    {

        {/**< Bloco anônimo */
        int matrix[ lin ][ col ], i, aij = 0;

        for( i =  0; i < lin; i++ )
        {
            if( i % 2 )
                aij =  tras( col, matrix[ i ], aij );
            else
                aij =  frente( col, matrix[ i ], aij );
        }
        print_matriz( lin, col, matrix ), lin = col = 0;
        }// Bloco anõnimo

        printf( "[#] Digite o numero de linhas e colunas da matriz: " );
        scanf( " %u%u", &lin, &col );

    };

    return 0;
}

//##################    Definição  de Função     #######################//
int frente( unsigned int col, int vetor[], int val )
{
    unsigned int j;

    for( j = 0; j < col; j )vetor[ j++ ] =  ++val;
    return val;
}

int tras( unsigned int col, int vetor[], int val )
{
    unsigned int j;

    for( j = col; j > 0; j )vetor[ --j ] =  ++val;
    return val;
}

int print_matriz( unsigned int lin, unsigned int col, int matriz[][col] )
{
    int i, j;

    for( j = 0; j < col; j++ )printf( " ---" );
    printf( "\n" );

    for( i = 0; i < lin; i++ )
    {
        for( j = 0; j < col; j++ )
        {
            printf( " %3d", matriz[ i ][ j ] );
        }
        printf( "\n" );
    }
    printf( "\n" );
    return 0;
}

         Matriz_Mauro_Britivaldo.png

___________________________________

  • Curtir 1
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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!