Ir para conteúdo
Fórum Script Brasil
  • 0

Duvida função com matrizes(RESOLVIDO)


Fabin

Pergunta

Boa tarde galera é o seguinte to com duvida em um codigo aqui, primeiramente fiz ele todo no int main e funcionou beleza, o programa pede para incialmente fazer uma matriz com bordas e com a posição digitada pelo usuário adicionar um + nessa posição

codigo no int main

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


int main(){
    int linha=20, coluna=10, l, c, posicao_um, posicao_dois, opcao, hor, ant_hor, vert, ant_ver;
    char brinq[linha][coluna];
    for(l=0;l<linha;l++){//for para imprimir linhas e colunas com O maisculo de acor com exercicio
            printf("\n");
            for(c=0;c<coluna;c++){
                    if(l==0){
                        brinq[l][c]='O';//preenche coluna superior com O
                    }else{
                          if(l>=1 && c==0){
                              brinq[l][c]='O'; //preenche primeira coluna lateral com O
                          }else{
                                if(l>=0 && c==9){
                                         brinq[l][c]='O';//preenche ultima coluna lateral com O
                                }else{
                                      if(l==19){
                                          brinq[l][c]='O';//preenche ultima linha com O
                                      }else{
                                            brinq[l][c]=' ';
                                            }
                                      }
                               }
                               
                    }
                    //printf("%c\t",brinq[l][c]); // imprime matriz completa na tela
            }
    }
    
    //printf("\n\n");
    //Parte a e b do exercicio 5 para usa-la desative parte c
    do{ //primeiro do para certificar que usuário não ira digita um aposição maior ou menor que a ultima linha e coluna da matriz
           do{ //os quatros do's contando com este é para certificar que usuário não ira digitar uma posição que é da borda da matriz
                   do{ // já explicado
                          do{ // já explicado
                                 do{ // já explicado
                                        do{ // este do é caso o usuário queira sair ele aperta a letra f que sai da repetição e termina programa
                                               printf("Digite um posiçao onde deseja colocar o sinal +:\t");
                                               scanf("%d",&posicao_um);
                                               scanf("%d",&posicao_dois);
                                               if(posicao_um == 'f' || posicao_dois == 'f'){
                                                   system("pause");
                                                   return 0;
                                               }
                                               if(posicao_um==0){ //ifs para emitir mensagem quando usuário digitar posiçao pertencente a borda da matriz
                                                   printf("Essa posição faz parte da borda. Digite outra diferente.\n");
                                               }else{
                                                     if(posicao_um>=1 && posicao_dois==0){
                                                         printf("Essa posição faz parte da borda. Digite outra diferente.\n");
                                                     }else{
                                                           if(posicao_um>=0 && posicao_dois==9){
                                                               printf("Essa posição faz parte da borda. Digite outra diferente.\n");
                                                           }else{
                                                                 if(posicao_um==19){
                                                                     printf("Essa posição faz parte da borda. Digite outra diferente.\n");
                                                                 }
                                                           }
                                                     }
                                               }
                                               brinq[posicao_um][posicao_dois] = '+';
                                               printf("\n");
                                               for(l=0;l<linha;l++){ //for's para imprimir matriz com sinal de + na posição escolhida pelo usuário
                                                   printf("\n");                                
                                                   for(c=0;c<coluna;c++){
                                                           printf("%c\t",brinq[l][c]);
                                                   }
                                               }
                                               printf("\n");
                                        }while(posicao_um != 'f' || posicao_dois != 'f');
                                 }while(posicao_um == 19);
                          }while(posicao_um >=0 && c ==9);
                   }while(posicao_um >=1 && posicao_dois == 0);
           }while(posicao_um == 0);
    }while((posicao_um > 19 && posicao_dois > 9) || (posicao_um < 0 && posicao_dois > 0) );
Agora que estou tentando colocar ela em função está ocorrendo erro, o que estou errnado:
#include <stdlib.h>
#include <stdio.h>

char imprime_matriz_borda(){
    int linha=20, coluna=10, l, c;
    char brinq[linha][coluna];
    for(l=0;l<linha;l++){//for para imprimir linhas e colunas com O maisculo de acor com exercicio
            for(c=0;c<coluna;c++){
                    if(l==0){
                        brinq[l][c]='O';//preenche coluna superior com O
                    }else{
                          if(l>=1 && c==0){
                              brinq[l][c]='O'; //preenche primeira coluna lateral com O
                          }else{
                                if(l>=0 && c==9){
                                         brinq[l][c]='O';//preenche ultima coluna lateral com O
                                }else{
                                      if(l==19){
                                          brinq[l][c]='O';//preenche ultima linha com O
                                      }else{
                                            brinq[l][c]=' ';
                                            }
                                      }
                               }
                               
                    }
                    printf("%c\t",brinq[l][c]); // imprime matriz completa na tela
            }
    }
    return brinq[linha][coluna];
}

    
void sinal_indicado_matriz(char mat[20][10]){   
    int linha=20, coluna=10, l, c, posicao_um, posicao_dois;
    char brinq[linha][coluna];
    do{ //primeiro do para certificar que usuário não ira digita um aposição maior ou menor que a ultima linha e coluna da matriz
           do{ //os quatros do's contando com este é para certificar que usuário não ira digitar uma posição que é da borda da matriz
                   do{ // já explicado
                          do{ // já explicado
                                 do{ // já explicado
                                        do{ // este do é caso o usuário queira sair ele aperta a letra f que sai da repetição e termina programa
                                               printf("Digite um posiçao onde deseja colocar o sinal +:\t");
                                               scanf("%d",&posicao_um);
                                               scanf("%d",&posicao_dois);
                                               if(posicao_um == 'f' || posicao_dois == 'f'){
                                                   system("pause");
                                                   //return 0;
                                               }
                                               if(posicao_um==0){ //ifs para emitir mensagem quando usuário digitar posiçao pertencente a borda da matriz
                                                   printf("Essa posição faz parte da borda. Digite outra diferente.\n");
                                               }else{
                                                     if(posicao_um>=1 && posicao_dois==0){
                                                         printf("Essa posição faz parte da borda. Digite outra diferente.\n");
                                                     }else{
                                                           if(posicao_um>=0 && posicao_dois==9){
                                                               printf("Essa posição faz parte da borda. Digite outra diferente.\n");
                                                           }else{
                                                                 if(posicao_um==19){
                                                                     printf("Essa posição faz parte da borda. Digite outra diferente.\n");
                                                                 }
                                                           }
                                                     }
                                               }
                                               brinq[posicao_um][posicao_dois] = '+';
                                               printf("\n");
                                               for(l=0;l<linha;l++){ //for's para imprimir matriz com sinal de + na posição escolhida pelo usuário                                
                                                   for(c=0;c<coluna;c++){
                                                           printf("%c\t",brinq[l][c]);
                                                   }
                                               }
                                               printf("\n");
                                        }while(posicao_um != 'f' || posicao_dois != 'f');
                                 }while(posicao_um == 19);
                          }while(posicao_um >=0 && c ==9);
                   }while(posicao_um >=1 && posicao_dois == 0);
           }while(posicao_um == 0);
    }while((posicao_um > 19 && posicao_dois > 9) || (posicao_um < 0 && posicao_dois > 0) );
}

int main(){
    char x[20][10];
    imprime_matriz_borda();
    sinal_indicado_matriz(x);
    
    printf("\n");
    system("pause");
    return  0;
}

Editado por Fabin
Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 0

Olá Fabin,

Tem algumas coisas erradas na sua solução usando funções.

Quando você fez tudo no main() as variáveis declaradas faziam parte do escopo da função, mas quando você dividiu tudo em funções e declarou variáveis em vários pontos elas passaram a ser distintas uma das outras.

A solução para o seu problema é você declarar a matriz brinq de forma global e não usar passagem de parâmetros para a função sinal_indicado_matriz()

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

char imprime_matriz_borda(){
    int linha=20, coluna=10, l, c;
    char brinq[linha][coluna];
    for(l=0;l<linha;l++){//for para imprimir linhas e colunas com O maisculo de acor com exercicio
            for(c=0;c<coluna;c++){
                    if(l==0){
                        brinq[l][c]='O';//preenche coluna superior com O
                    }else{
                          if(l>=1 && c==0){
                              brinq[l][c]='O'; //preenche primeira coluna lateral com O
                          }else{
                                if(l>=0 && c==9){
                                         brinq[l][c]='O';//preenche ultima coluna lateral com O
                                }else{
                                      if(l==19){
                                          brinq[l][c]='O';//preenche ultima linha com O
                                      }else{
                                            brinq[l][c]=' ';
                                            }
                                      }
                               }
                               
                    }
                    printf("%c\t",brinq[l][c]); // imprime matriz completa na tela
            }
    }
    return brinq[linha][coluna];
}

    
void sinal_indicado_matriz(char mat[20][10]){   
    int linha=20, coluna=10, l, c, posicao_um, posicao_dois;
    char brinq[linha][coluna];
    do{ //primeiro do para certificar que usuário não ira digita um aposição maior ou menor que a ultima linha e coluna da matriz
           do{ //os quatros do's contando com este é para certificar que usuário não ira digitar uma posição que é da borda da matriz
                   do{ // já explicado
                          do{ // já explicado
                                 do{ // já explicado
                                        do{ // este do é caso o usuário queira sair ele aperta a letra f que sai da repetição e termina programa
                                               printf("Digite um posiçao onde deseja colocar o sinal +:\t");
                                               scanf("%d",&posicao_um);
                                               scanf("%d",&posicao_dois);
                                               if(posicao_um == 'f' || posicao_dois == 'f'){
                                                   system("pause");
                                                   //return 0;
                                               }
                                               if(posicao_um==0){ //ifs para emitir mensagem quando usuário digitar posiçao pertencente a borda da matriz
                                                   printf("Essa posição faz parte da borda. Digite outra diferente.\n");
                                               }else{
                                                     if(posicao_um>=1 && posicao_dois==0){
                                                         printf("Essa posição faz parte da borda. Digite outra diferente.\n");
                                                     }else{
                                                           if(posicao_um>=0 && posicao_dois==9){
                                                               printf("Essa posição faz parte da borda. Digite outra diferente.\n");
                                                           }else{
                                                                 if(posicao_um==19){
                                                                     printf("Essa posição faz parte da borda. Digite outra diferente.\n");
                                                                 }
                                                           }
                                                     }
                                               }
                                               brinq[posicao_um][posicao_dois] = '+';
                                               printf("\n");
                                               for(l=0;l<linha;l++){ //for's para imprimir matriz com sinal de + na posição escolhida pelo usuário                                
                                                   for(c=0;c<coluna;c++){
                                                           printf("%c\t",brinq[l][c]);
                                                   }
                                               }
                                               printf("\n");
                                        }while(posicao_um != 'f' || posicao_dois != 'f');
                                 }while(posicao_um == 19);
                          }while(posicao_um >=0 && c ==9);
                   }while(posicao_um >=1 && posicao_dois == 0);
           }while(posicao_um == 0);
    }while((posicao_um > 19 && posicao_dois > 9) || (posicao_um < 0 && posicao_dois > 0) );
}

int main()
{
    char x[20][10];
    imprime_matriz_borda();
    sinal_indicado_matriz(x);
    
    printf("\n");
    system("pause");
    return  0;
}

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Fabin,

Tem algumas coisas erradas na sua solução usando funções.

Quando você fez tudo no main() as variáveis declaradas faziam parte do escopo da função, mas quando você dividiu tudo em funções e declarou variáveis em vários pontos elas passaram a ser distintas uma das outras.

A solução para o seu problema é você declarar a matriz brinq de forma global e não usar passagem de parâmetros para a função sinal_indicado_matriz()

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

char imprime_matriz_borda(){
    int linha=20, coluna=10, l, c;
    char brinq[linha][coluna];
    for(l=0;l<linha;l++){//for para imprimir linhas e colunas com O maisculo de acor com exercicio
            for(c=0;c<coluna;c++){
                    if(l==0){
                        brinq[l][c]='O';//preenche coluna superior com O
                    }else{
                          if(l>=1 && c==0){
                              brinq[l][c]='O'; //preenche primeira coluna lateral com O
                          }else{
                                if(l>=0 && c==9){
                                         brinq[l][c]='O';//preenche ultima coluna lateral com O
                                }else{
                                      if(l==19){
                                          brinq[l][c]='O';//preenche ultima linha com O
                                      }else{
                                            brinq[l][c]=' ';
                                            }
                                      }
                               }
                               
                    }
                    printf("%c\t",brinq[l][c]); // imprime matriz completa na tela
            }
    }
    return brinq[linha][coluna];
}

    
void sinal_indicado_matriz(char mat[20][10]){   
    int linha=20, coluna=10, l, c, posicao_um, posicao_dois;
    char brinq[linha][coluna];
    do{ //primeiro do para certificar que usuário não ira digita um aposição maior ou menor que a ultima linha e coluna da matriz
           do{ //os quatros do's contando com este é para certificar que usuário não ira digitar uma posição que é da borda da matriz
                   do{ // já explicado
                          do{ // já explicado
                                 do{ // já explicado
                                        do{ // este do é caso o usuário queira sair ele aperta a letra f que sai da repetição e termina programa
                                               printf("Digite um posiçao onde deseja colocar o sinal +:\t");
                                               scanf("%d",&posicao_um);
                                               scanf("%d",&posicao_dois);
                                               if(posicao_um == 'f' || posicao_dois == 'f'){
                                                   system("pause");
                                                   //return 0;
                                               }
                                               if(posicao_um==0){ //ifs para emitir mensagem quando usuário digitar posiçao pertencente a borda da matriz
                                                   printf("Essa posição faz parte da borda. Digite outra diferente.\n");
                                               }else{
                                                     if(posicao_um>=1 && posicao_dois==0){
                                                         printf("Essa posição faz parte da borda. Digite outra diferente.\n");
                                                     }else{
                                                           if(posicao_um>=0 && posicao_dois==9){
                                                               printf("Essa posição faz parte da borda. Digite outra diferente.\n");
                                                           }else{
                                                                 if(posicao_um==19){
                                                                     printf("Essa posição faz parte da borda. Digite outra diferente.\n");
                                                                 }
                                                           }
                                                     }
                                               }
                                               brinq[posicao_um][posicao_dois] = '+';
                                               printf("\n");
                                               for(l=0;l<linha;l++){ //for's para imprimir matriz com sinal de + na posição escolhida pelo usuário                                
                                                   for(c=0;c<coluna;c++){
                                                           printf("%c\t",brinq[l][c]);
                                                   }
                                               }
                                               printf("\n");
                                        }while(posicao_um != 'f' || posicao_dois != 'f');
                                 }while(posicao_um == 19);
                          }while(posicao_um >=0 && c ==9);
                   }while(posicao_um >=1 && posicao_dois == 0);
           }while(posicao_um == 0);
    }while((posicao_um > 19 && posicao_dois > 9) || (posicao_um < 0 && posicao_dois > 0) );
}

int main()
{
    char x[20][10];
    imprime_matriz_borda();
    sinal_indicado_matriz(x);
    
    printf("\n");
    system("pause");
    return  0;
}
Olá Fabin, Tem algumas coisas erradas na sua solução usando funções. Quando você fez tudo no main() as variáveis declaradas faziam parte do escopo da função, mas quando você dividiu tudo em funções e declarou variáveis em vários pontos elas passaram a ser distintas uma das outras. A solução para o seu problema é você declarar a matriz brinq de forma global e não usar passagem de parâmetros para a função sinal_indicado_matriz(). Ver modificações no código. Resolvido o problema, tenta otimizar os if do seu programa, você usar 3 printf pra dar a mesma mensagem, dá pra fazer isso uma vez só usando || (ou) no if. Agora um comentário pessoal. Você usa uma identação padrão, mas que eu acho muito confusa de entender. Se você não se ofender, eu usaria as chaves da seguinte forma: void Funcao(parametros) { } ao invés de: void Funcao(parametros){ } Qualquer coisa posta ai no forum. Abs
#include <stdlib.h>
#include <stdio.h>

char brinq[20][10];  // MATRIZ DECLARADA COMO GLOBAL E VISIVEL POR TODAS AS FUNÇÕES DO MÓDULO

char imprime_matriz_borda(){
    int linha=20, coluna=10, l, c;
    for(l=0;l<linha;l++){//for para imprimir linhas e colunas com O maisculo de acor com exercicio
            for(c=0;c<coluna;c++){
                    if(l==0){
                        brinq[l][c]='O';//preenche coluna superior com O
                    }else{
                          if(l>=1 && c==0){
                              brinq[l][c]='O'; //preenche primeira coluna lateral com O
                          }else{
                                if(l>=0 && c==9){
                                         brinq[l][c]='O';//preenche ultima coluna lateral com O
                                }else{
                                      if(l==19){
                                          brinq[l][c]='O';//preenche ultima linha com O
                                      }else{
                                            brinq[l][c]=' ';
                                            }
                                      }
                               }
                               
                    }
                    printf("%c\t",brinq[l][c]); // imprime matriz completa na tela
            }
    }
    return brinq[linha][coluna];
}

    
void sinal_indicado_matriz(void){   
    int linha=20, coluna=10, l, c, posicao_um, posicao_dois;
    do{ //primeiro do para certificar que usuário não ira digita um aposição maior ou menor que a ultima linha e coluna da matriz
           do{ //os quatros do's contando com este é para certificar que usuário não ira digitar uma posição que é da borda da matriz
                   do{ // já explicado
                          do{ // já explicado
                                 do{ // já explicado
                                        do{ // este do é caso o usuário queira sair ele aperta a letra f que sai da repetição e termina programa
                                               printf("Digite um posiçao onde deseja colocar o sinal +:\t");
                                               scanf("%d",&posicao_um);
                                               scanf("%d",&posicao_dois);
                                               if(posicao_um == 'f' || posicao_dois == 'f'){
                                                   system("pause");
                                                   //return 0;
                                               }
                                               if(posicao_um==0){ //ifs para emitir mensagem quando usuário digitar posiçao pertencente a borda da matriz
                                                   printf("Essa posição faz parte da borda. Digite outra diferente.\n");
                                               }else{
                                                     if(posicao_um>=1 && posicao_dois==0){
                                                         printf("Essa posição faz parte da borda. Digite outra diferente.\n");
                                                     }else{
                                                           if(posicao_um>=0 && posicao_dois==9){
                                                               printf("Essa posição faz parte da borda. Digite outra diferente.\n");
                                                           }else{
                                                                 if(posicao_um==19){
                                                                     printf("Essa posição faz parte da borda. Digite outra diferente.\n");
                                                                 }
                                                           }
                                                     }
                                               }
                                               brinq[posicao_um][posicao_dois] = '+';
                                               printf("\n");
                                               for(l=0;l<linha;l++){ //for's para imprimir matriz com sinal de + na posição escolhida pelo usuário                                
                                                   for(c=0;c<coluna;c++){
                                                           printf("%c\t",brinq[l][c]);
                                                   }
                                               }
                                               printf("\n");
                                        }while(posicao_um != 'f' || posicao_dois != 'f');
                                 }while(posicao_um == 19);
                          }while(posicao_um >=0 && c ==9);
                   }while(posicao_um >=1 && posicao_dois == 0);
           }while(posicao_um == 0);
    }while((posicao_um > 19 && posicao_dois > 9) || (posicao_um < 0 && posicao_dois > 0) );
}

int main()
{
    imprime_matriz_borda();
    sinal_indicado_matriz();
    
    printf("\n");
    system("pause");
    return  0;
}

Editado por CPP
Link para o comentário
Compartilhar em outros sites

  • 0
Olá Fabin,

Tem algumas coisas erradas na sua solução usando funções.

Quando você fez tudo no main() as variáveis declaradas faziam parte do escopo da função, mas quando você dividiu tudo em funções e declarou variáveis em vários pontos elas passaram a ser distintas uma das outras.

A solução para o seu problema é você declarar a matriz brinq de forma global e não usar passagem de parâmetros para a função sinal_indicado_matriz()

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

char imprime_matriz_borda(){
    int linha=20, coluna=10, l, c;
    char brinq[linha][coluna];
    for(l=0;l<linha;l++){//for para imprimir linhas e colunas com O maisculo de acor com exercicio
            for(c=0;c<coluna;c++){
                    if(l==0){
                        brinq[l][c]='O';//preenche coluna superior com O
                    }else{
                          if(l>=1 && c==0){
                              brinq[l][c]='O'; //preenche primeira coluna lateral com O
                          }else{
                                if(l>=0 && c==9){
                                         brinq[l][c]='O';//preenche ultima coluna lateral com O
                                }else{
                                      if(l==19){
                                          brinq[l][c]='O';//preenche ultima linha com O
                                      }else{
                                            brinq[l][c]=' ';
                                            }
                                      }
                               }
                               
                    }
                    printf("%c\t",brinq[l][c]); // imprime matriz completa na tela
            }
    }
    return brinq[linha][coluna];
}

    
void sinal_indicado_matriz(char mat[20][10]){   
    int linha=20, coluna=10, l, c, posicao_um, posicao_dois;
    char brinq[linha][coluna];
    do{ //primeiro do para certificar que usuário não ira digita um aposição maior ou menor que a ultima linha e coluna da matriz
           do{ //os quatros do's contando com este é para certificar que usuário não ira digitar uma posição que é da borda da matriz
                   do{ // já explicado
                          do{ // já explicado
                                 do{ // já explicado
                                        do{ // este do é caso o usuário queira sair ele aperta a letra f que sai da repetição e termina programa
                                               printf("Digite um posiçao onde deseja colocar o sinal +:\t");
                                               scanf("%d",&posicao_um);
                                               scanf("%d",&posicao_dois);
                                               if(posicao_um == 'f' || posicao_dois == 'f'){
                                                   system("pause");
                                                   //return 0;
                                               }
                                               if(posicao_um==0){ //ifs para emitir mensagem quando usuário digitar posiçao pertencente a borda da matriz
                                                   printf("Essa posição faz parte da borda. Digite outra diferente.\n");
                                               }else{
                                                     if(posicao_um>=1 && posicao_dois==0){
                                                         printf("Essa posição faz parte da borda. Digite outra diferente.\n");
                                                     }else{
                                                           if(posicao_um>=0 && posicao_dois==9){
                                                               printf("Essa posição faz parte da borda. Digite outra diferente.\n");
                                                           }else{
                                                                 if(posicao_um==19){
                                                                     printf("Essa posição faz parte da borda. Digite outra diferente.\n");
                                                                 }
                                                           }
                                                     }
                                               }
                                               brinq[posicao_um][posicao_dois] = '+';
                                               printf("\n");
                                               for(l=0;l<linha;l++){ //for's para imprimir matriz com sinal de + na posição escolhida pelo usuário                                
                                                   for(c=0;c<coluna;c++){
                                                           printf("%c\t",brinq[l][c]);
                                                   }
                                               }
                                               printf("\n");
                                        }while(posicao_um != 'f' || posicao_dois != 'f');
                                 }while(posicao_um == 19);
                          }while(posicao_um >=0 && c ==9);
                   }while(posicao_um >=1 && posicao_dois == 0);
           }while(posicao_um == 0);
    }while((posicao_um > 19 && posicao_dois > 9) || (posicao_um < 0 && posicao_dois > 0) );
}

int main()
{
    char x[20][10];
    imprime_matriz_borda();
    sinal_indicado_matriz(x);
    
    printf("\n");
    system("pause");
    return  0;
}
Olá Fabin, Tem algumas coisas erradas na sua solução usando funções. Quando você fez tudo no main() as variáveis declaradas faziam parte do escopo da função, mas quando você dividiu tudo em funções e declarou variáveis em vários pontos elas passaram a ser distintas uma das outras. A solução para o seu problema é você declarar a matriz brinq de forma global e não usar passagem de parâmetros para a função sinal_indicado_matriz(). Ver modificações no código. Resolvido o problema, tenta otimizar os if do seu programa, você usar 3 printf pra dar a mesma mensagem, dá pra fazer isso uma vez só usando || (ou) no if. Agora um comentário pessoal. Você usa uma identação padrão, mas que eu acho muito confusa de entender. Se você não se ofender, eu usaria as chaves da seguinte forma: void Funcao(parametros) { } ao invés de: void Funcao(parametros){ } Qualquer coisa posta ai no forum. Abs
#include <stdlib.h>
#include <stdio.h>

char brinq[20][10];  // MATRIZ DECLARADA COMO GLOBAL E VISIVEL POR TODAS AS FUNÇÕES DO MÓDULO

char imprime_matriz_borda(){
    int linha=20, coluna=10, l, c;
    for(l=0;l<linha;l++){//for para imprimir linhas e colunas com O maisculo de acor com exercicio
            for(c=0;c<coluna;c++){
                    if(l==0){
                        brinq[l][c]='O';//preenche coluna superior com O
                    }else{
                          if(l>=1 && c==0){
                              brinq[l][c]='O'; //preenche primeira coluna lateral com O
                          }else{
                                if(l>=0 && c==9){
                                         brinq[l][c]='O';//preenche ultima coluna lateral com O
                                }else{
                                      if(l==19){
                                          brinq[l][c]='O';//preenche ultima linha com O
                                      }else{
                                            brinq[l][c]=' ';
                                            }
                                      }
                               }
                               
                    }
                    printf("%c\t",brinq[l][c]); // imprime matriz completa na tela
            }
    }
    return brinq[linha][coluna];
}

    
void sinal_indicado_matriz(void){   
    int linha=20, coluna=10, l, c, posicao_um, posicao_dois;
    do{ //primeiro do para certificar que usuário não ira digita um aposição maior ou menor que a ultima linha e coluna da matriz
           do{ //os quatros do's contando com este é para certificar que usuário não ira digitar uma posição que é da borda da matriz
                   do{ // já explicado
                          do{ // já explicado
                                 do{ // já explicado
                                        do{ // este do é caso o usuário queira sair ele aperta a letra f que sai da repetição e termina programa
                                               printf("Digite um posiçao onde deseja colocar o sinal +:\t");
                                               scanf("%d",&posicao_um);
                                               scanf("%d",&posicao_dois);
                                               if(posicao_um == 'f' || posicao_dois == 'f'){
                                                   system("pause");
                                                   //return 0;
                                               }
                                               if(posicao_um==0){ //ifs para emitir mensagem quando usuário digitar posiçao pertencente a borda da matriz
                                                   printf("Essa posição faz parte da borda. Digite outra diferente.\n");
                                               }else{
                                                     if(posicao_um>=1 && posicao_dois==0){
                                                         printf("Essa posição faz parte da borda. Digite outra diferente.\n");
                                                     }else{
                                                           if(posicao_um>=0 && posicao_dois==9){
                                                               printf("Essa posição faz parte da borda. Digite outra diferente.\n");
                                                           }else{
                                                                 if(posicao_um==19){
                                                                     printf("Essa posição faz parte da borda. Digite outra diferente.\n");
                                                                 }
                                                           }
                                                     }
                                               }
                                               brinq[posicao_um][posicao_dois] = '+';
                                               printf("\n");
                                               for(l=0;l<linha;l++){ //for's para imprimir matriz com sinal de + na posição escolhida pelo usuário                                
                                                   for(c=0;c<coluna;c++){
                                                           printf("%c\t",brinq[l][c]);
                                                   }
                                               }
                                               printf("\n");
                                        }while(posicao_um != 'f' || posicao_dois != 'f');
                                 }while(posicao_um == 19);
                          }while(posicao_um >=0 && c ==9);
                   }while(posicao_um >=1 && posicao_dois == 0);
           }while(posicao_um == 0);
    }while((posicao_um > 19 && posicao_dois > 9) || (posicao_um < 0 && posicao_dois > 0) );
}

int main()
{
    imprime_matriz_borda();
    sinal_indicado_matriz();
    
    printf("\n");
    system("pause");
    return  0;
}

Opa, claro que não me ofendo, te agradeço pois dessa forma que melhoramos, vou fazer dessa forma que você informou, em relação ao if em qual parte do código você está falando, para eu tentar consertar?

Não usei variavel global justamente por que professor fala da não necessidade hoje de usar variaveis globais alem de poder complicar o codigo, mas neste caso acho que não há problmea ne?

tem uma outra parte do programa aqui vou tentar fazer qualquer coisa coloco minhas duvidas aqui novamente ok?

muito obrigado brother

obrigado mesmo

Link para o comentário
Compartilhar em outros sites

  • 0

CPP vou colocar o meu codigo final e o que o exercicio propos, me fale o que eu posso melhorar no meu codigo para ele ficar menor, mais bonito e tals

valews

t+

/*Exercício 4.
4. Escreva um programa que crie uma matriz de 22 x 70 elementos, todos eles preenchidos por espaços, à exceção da borda da 
matriz (as colunas laterais e as linhas superior e inferior), cujos elementos devem ser preenchidos por “O” (letra o maiúscula).
5. A partir do exercício acima, crie:
a. uma rotina (função) que coloque um sinal “+” em um ponto qualquer, segundo requisitado pelo usuário.
b. Faça um laço na função acima, que permita ao usuário reescrever o sinal em qualquer posição quantas vezes quiser.
c. Baseado nas rotinas acima, reescreva o programa de modo que o sinal “+” seja inicialmente escrito no centro da matriz,
 mas que permita ao usuário movimentá-lo, com o uso das teclas 4 (esquerda), 6 (direita), 8 (cima), 2 (baixo).*/

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

char brinq[20][10];  // MATRIZ DECLARADA COMO GLOBAL E VISIVEL POR TODAS AS FUNÇÕES DO MÓDULO

//Declarações das funçoes usadas

char imprime_matriz_borda();    
void sinal_indicado_matriz();
void movimentando_sinal_matriz();


int main() //função principal para execução do programa
{
    imprime_matriz_borda();
    //sinal_indicado_matriz(); //parte a e b do exercicio 5
    movimentando_sinal_matriz();
    
    printf("\n");
    system("pause");
    return  0;
}

//abaixo declarações e escopos das funções

char imprime_matriz_borda() //função para imprimir borda com O na matriz
{
    int linha=20, coluna=10, l, c;
    for(l=0;l<linha;l++){//for para imprimir linhas e colunas com O maisculo de acor com exercicio
            for(c=0;c<coluna;c++){
                    if(l==0){
                        brinq[l][c]='O';//preenche coluna superior com O
                    }else{
                          if(l>=1 && c==0){
                              brinq[l][c]='O'; //preenche primeira coluna lateral com O
                          }else{
                                if(l>=0 && c==9){
                                         brinq[l][c]='O';//preenche ultima coluna lateral com O
                                }else{
                                      if(l==19){
                                          brinq[l][c]='O';//preenche ultima linha com O
                                      }else{
                                            brinq[l][c]=' ';
                                            }
                                      }
                               }
                               
                    }
                    printf("%c\t",brinq[l][c]); // imprime matriz completa na tela
            }
    }
    return brinq[linha][coluna];
}

void sinal_indicado_matriz()// função para exercicio a e b colocando sinal onde quiser na matriz
{   
    int linha=20, coluna=10, l, c, posicao_um, posicao_dois;
    do{ //primeiro do para certificar que usuário não ira digita um aposição maior ou menor que a ultima linha e coluna da matriz
           do{ //os quatros do's contando com este é para certificar que usuário não ira digitar uma posição que é da borda da matriz
                   do{ // já explicado
                          do{ // já explicado
                                 do{ // já explicado
                                        do{ // este do é caso o usuário queira sair ele aperta a letra f que sai da repetição e termina programa
                                               printf("Digite um posiçao onde deseja colocar o sinal +:\t");
                                               scanf("%d",&posicao_um);
                                               scanf("%d",&posicao_dois);
                                               if(posicao_um == 'f' || posicao_dois == 'f'){
                                                   system("pause");
                                                   //return 0;
                                               }
                                               if(posicao_um==0){ //ifs para emitir mensagem quando usuário digitar posiçao pertencente a borda da matriz
                                                   printf("Essa posição faz parte da borda. Digite outra diferente.\n");
                                               }else{
                                                     if(posicao_um>=1 && posicao_dois==0){
                                                         printf("Essa posição faz parte da borda. Digite outra diferente.\n");
                                                     }else{
                                                           if(posicao_um>=0 && posicao_dois==9){
                                                               printf("Essa posição faz parte da borda. Digite outra diferente.\n");
                                                           }else{
                                                                 if(posicao_um==19){
                                                                     printf("Essa posição faz parte da borda. Digite outra diferente.\n");
                                                                 }
                                                           }
                                                     }
                                               }
                                               brinq[posicao_um][posicao_dois] = '+';
                                               printf("\n");
                                               for(l=0;l<linha;l++){ //for's para imprimir matriz com sinal de + na posição escolhida pelo usuário                                
                                                   for(c=0;c<coluna;c++){
                                                           printf("%c\t",brinq[l][c]);
                                                   }
                                               }
                                               printf("\n");
                                        }while(posicao_um != 'f' || posicao_dois != 'f');
                                 }while(posicao_um == 19);
                          }while(posicao_um >=0 && c ==9);
                   }while(posicao_um >=1 && posicao_dois == 0);
           }while(posicao_um == 0);
    }while((posicao_um > 19 && posicao_dois > 9) || (posicao_um < 0 && posicao_dois > 0) );
}

void movimentando_sinal_matriz() //ultima parte do exercicio movimentando sinal pela matriz
{
     int linha=20, coluna=10, l, c, opcao, hor, ant_hor, vert, ant_ver;
     
         brinq[9][4] = '+'; //coloca o + no centro da matriz
    for(l=0;l<linha;l++){ // imprime a matriz na tela com o + no centro
        //printf("\n");                                
        for(c=0;c<coluna;c++){
            printf("%c\t",brinq[l][c]);
        }
    }
    hor = 4; //variavel declarada para manipulação na horizontal do + na matriz recebendo 4 q é a coluna que representa o centro da matriz
    
    vert = 9;// variavel declarada para manipulação na vertical do + na matriz recebendo 9 que é a linha que representa o centro da matriz
    
    do{ // do para movimentar o + na matriz quando for igual a 1 sai do programa
           printf("Digite um dos numeros para movimentar o + na matriz:\n4(esquerda)\t6(direita)\t8(cima)\t2(baixo)\t1(para sair)\n");
           scanf("%d",&opcao);
           printf("\n");
           if(opcao == 4){ // opçao para movimentar o + para esquerda
                    if(hor == 1){ //caso variavel hor for igual a 1 incrementa um pois se refere a borda da matriz não ultrapassando ou sobrepondo a mesma
                           hor++;
                    }
                    hor--; //decrementa variavel para que diminua uma posição na vertical quando digitado 6
                    brinq[vert][hor] = '+'; //matriz recebe o + já com hor subtraido para mostralo na posição antecessora
                    ant_hor = hor + 1; //variavel para armazenar posição anterior da decrementada
                    brinq[vert][ant_hor] = ' '; // aqui a matriz recebe na posição anteriro decrementada vazio pois senao iria imprimiar um mai atras do outro
                    for(l=0;l<linha;l++){
                          //printf("\n");                                
                          for(c=0;c<coluna;c++){
                               printf("%c\t",brinq[l][c]);
                          }
                    }
                    printf("\n");
                    
           }
           if(opcao == 6){//mesmo esquema da opção 4 porem invertido
                    if(hor == 8){
                           hor--;
                    }
                    hor++;
                    brinq[vert][hor] = '+';
                    ant_hor = hor - 1;
                    brinq[vert][ant_hor] = ' ';
                    for(l=0;l<linha;l++){
                          //printf("\n");                                
                          for(c=0;c<coluna;c++){
                               printf("%c\t",brinq[l][c]);
                          }
                    }
                    printf("\n");
           }
           if(opcao == 8){
                    if(vert == 1){ //se variavel vert igual a 1 incrementa +1 para não sobrepor ou ultrapassar a borda da matriz
                            vert++;
                    }
                    vert--;// decremneto na vertical que seria a coluna da matriz 
                    brinq[vert][hor] = '+'; //matriz vai receber o mais na coluna anteriror graçaas variavel vert que está sendo decremnetada
                    ant_ver = vert + 1; // aqui variavel ant_ver recebe posição anterior ddo decremento 
                    brinq[ant_ver][hor]= ' ';//aqui usa a posição anterior para colocar vazio senao imprimiria um + atraz do outro
                    for(l=0;l<linha;l++){
                          //printf("\n");                                
                          for(c=0;c<coluna;c++){
                               printf("%c\t",brinq[l][c]);
                          }
                    }
                    printf("\n");
           }
           if(opcao == 2){// mesmo esquema da posição 8 porem invertido
                    if(vert == 18){
                           vert--;
                    }
                    vert++;
                    brinq[vert][hor] = '+';
                    ant_ver = vert - 1;
                    brinq[ant_ver][hor] = ' ';
                    for(l=0;l<linha;l++){
                          //printf("\n");                                
                          for(c=0;c<coluna;c++){
                               printf("%c\t",brinq[l][c]);
                          }
                    }
                    printf("\n");
           }
                    
    }while(opcao != 1);
}

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Fabin,

O programa que você fez tá certo e funcionando e isso é o que importa, mas, como você me perguntou, estou postando uma versão do seu programa com algumas modificações. Usei algumas funções e conceitos que talvez você AINDA não conheca justamente pra te dar a oportunidade de ver que elas existem.

Tenta observar principalmente a utilização dos ifs e vê que dá pra otimizar o código usando a lógica a seu favor.

Só modifiquei o seu programa porque é algo que você já conhece e agora pode observar algumas idéias novas.

Ah, vê como uma identação ordenada ajuda a entender melhor o código. Essa é a identação que eu uso, tenta desenvolver seu padrão de escrita.

Se precisar de ajuda pode perguntar a vontade.

Bons estudos.

Abraços

/*Exercício 4.
4. Escreva um programa que crie uma matriz de 22 x 70 elementos, todos eles preenchidos por espaços, à exceção da borda da 
matriz (as colunas laterais e as linhas superior e inferior), cujos elementos devem ser preenchidos por “O” (letra o maiúscula).
5. A partir do exercício acima, crie:
a. uma rotina (função) que coloque um sinal “+” em um ponto qualquer, segundo requisitado pelo usuário.
b. Faça um laço na função acima, que permita ao usuário reescrever o sinal em qualquer posição quantas vezes quiser.
c. Baseado nas rotinas acima, reescreva o programa de modo que o sinal “+” seja inicialmente escrito no centro da matriz,
mas que permita ao usuário movimentá-lo, com o uso das teclas 4 (esquerda), 6 (direita), 8 (cima), 2 (baixo).*/

//-----------------------------------------------------------------------------------------
// Comentarios:
// - getch() tem a mesma funcao de parar o processamento que um system("pause"), só que getch() não depende de uma funcao do SO
// - clrscr() limpa a tela
// - kbhit() verifica se foi pressionada alguma tecla sem parar o processamento
//-----------------------------------------------------------------------------------------

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

char brinq[20][10];  // MATRIZ DECLARADA COMO GLOBAL E VISIVEL POR TODAS AS FUNÇÕES DO MÓDULO

//Declarações das funçoes usadas
void preencheMatriz();    
void movimentando_sinal_matriz();

#define LINHAS  20
#define COLUNAS 10

//------------------------------------------------------------------------------------------
void main() //função principal para execução do programa
{
    preencheMatriz();
    movimentando_sinal_matriz();
    printf("\nEncerrado!\n");
}

//------------------------------------------------------------------------------------------
//abaixo declarações e escopos das funções
//------------------------------------------------------------------------------------------
void preencheMatriz()
{
    int l, c;
    for(l=0;l<LINHAS;l++)
    {
        for(c=0;c<COLUNAS;c++)
        {
            // a principio todas as celulas comecam com ' '
            brinq[l][c]=' ';
            if(l==0 || l==19)
            {
                brinq[l][c]='O';//preenche coluna superior com O
            }
            if(l>=0 && (c==0 || c==9))
            {
                brinq[l][c]='O'; //preenche primeira coluna lateral com O
            }
        }
    }
}
//------------------------------------------------------------------------------------------
void movimentando_sinal_matriz() //ultima parte do exercicio movimentando sinal pela matriz
{
    int l, c, opcao, hor, vert, hAnt,vAnt;
    unsigned char escolha;
     
    brinq[9][4] = '+'; //coloca o + no centro da matriz
    clrscr();
    for(l=0;l<LINHAS;l++)
    { 
        // imprime a matriz na tela com o + no centro
        for(c=0;c<COLUNAS;c++)
        {
            printf("%c\t",brinq[l][c]);
        }
    }
    hor = 4; //variavel declarada para manipulação na horizontal do + na matriz recebendo 4 q é a coluna que representa o centro da matriz
    vert = 9;// variavel declarada para manipulação na vertical do + na matriz recebendo 9 que é a linha que representa o centro da matriz
    
    hAnt = hor;
    vAnt = vert;
    
    int imprime = 1;
    do  
    { // do para movimentar o + na matriz quando for igual a 1 sai do programa
        if (imprime)
        {
            imprime = 0;
            clrscr();
            for(l=0;l<LINHAS;l++)
            {
                //printf("\n");                                
                for(c=0;c<COLUNAS;c++)
                {
                    printf("%c\t",brinq[l][c]);
                }
            }
            printf("\n");
            printf("Digite um dos numeros para movimentar o + na matriz:\n4(esquerda)\t6(direita)\t8(cima)\t2(baixo)\t1(para sair)\n");
            printf("\n");
        }
        opcao = 0;
        if (kbhit())
            {
            escolha = getch();
            opcao = escolha - '0';    // converte texto em int
            
            if (opcao==2 || opcao==4 || opcao==6 || opcao==8)
                {
                // habilita o if que controla a impressao da matriz
                imprime = 1;
                // limpa a posição anterior do +
                brinq[vAnt][hAnt] = ' ';
                }
            }
        if(opcao == 4)
        { // opçao para movimentar o + para esquerda
            if(hor == 1)
                hor++;
            brinq[vert][--hor] = '+'; //matriz recebe o + já com hor subtraido para mostralo na posição antecessora
        }
        if(opcao == 6)
        {//mesmo esquema da opção 4 porem invertido
            if(hor == 8)
                hor--;
            brinq[vert][++hor] = '+';
        }
        if(opcao == 8)
        {
            if(vert == 1)
                vert++;
            brinq[--vert][hor] = '+'; //matriz vai receber o mais na coluna anteriror graçaas variavel vert que está sendo decremnetada
        }
        if(opcao == 2)
        {// mesmo esquema da posição 8 porem invertido
            if(vert == 18)
                vert--;
            brinq[++vert][hor] = '+';
        }
        // salva a posicao atual do +
        vAnt = vert;
        hAnt = hor;
    } while(opcao != 1);
}

Link para o comentário
Compartilhar em outros sites

  • 0
Olá Fabin,

O programa que você fez tá certo e funcionando e isso é o que importa, mas, como você me perguntou, estou postando uma versão do seu programa com algumas modificações. Usei algumas funções e conceitos que talvez você AINDA não conheca justamente pra te dar a oportunidade de ver que elas existem.

Tenta observar principalmente a utilização dos ifs e vê que dá pra otimizar o código usando a lógica a seu favor.

Só modifiquei o seu programa porque é algo que você já conhece e agora pode observar algumas idéias novas.

Ah, vê como uma identação ordenada ajuda a entender melhor o código. Essa é a identação que eu uso, tenta desenvolver seu padrão de escrita.

Se precisar de ajuda pode perguntar a vontade.

Bons estudos.

Abraços

/*Exercício 4.
4. Escreva um programa que crie uma matriz de 22 x 70 elementos, todos eles preenchidos por espaços, à exceção da borda da 
matriz (as colunas laterais e as linhas superior e inferior), cujos elementos devem ser preenchidos por “O” (letra o maiúscula).
5. A partir do exercício acima, crie:
a. uma rotina (função) que coloque um sinal “+” em um ponto qualquer, segundo requisitado pelo usuário.
b. Faça um laço na função acima, que permita ao usuário reescrever o sinal em qualquer posição quantas vezes quiser.
c. Baseado nas rotinas acima, reescreva o programa de modo que o sinal “+” seja inicialmente escrito no centro da matriz,
mas que permita ao usuário movimentá-lo, com o uso das teclas 4 (esquerda), 6 (direita), 8 (cima), 2 (baixo).*/

//-----------------------------------------------------------------------------------------
// Comentarios:
// - getch() tem a mesma funcao de parar o processamento que um system("pause"), só que getch() não depende de uma funcao do SO
// - clrscr() limpa a tela
// - kbhit() verifica se foi pressionada alguma tecla sem parar o processamento
//-----------------------------------------------------------------------------------------

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

char brinq[20][10];  // MATRIZ DECLARADA COMO GLOBAL E VISIVEL POR TODAS AS FUNÇÕES DO MÓDULO

//Declarações das funçoes usadas
void preencheMatriz();    
void movimentando_sinal_matriz();

#define LINHAS  20
#define COLUNAS 10

//------------------------------------------------------------------------------------------
void main() //função principal para execução do programa
{
    preencheMatriz();
    movimentando_sinal_matriz();
    printf("\nEncerrado!\n");
}

//------------------------------------------------------------------------------------------
//abaixo declarações e escopos das funções
//------------------------------------------------------------------------------------------
void preencheMatriz()
{
    int l, c;
    for(l=0;l<LINHAS;l++)
    {
        for(c=0;c<COLUNAS;c++)
        {
            // a principio todas as celulas comecam com ' '
            brinq[l][c]=' ';
            if(l==0 || l==19)
            {
                brinq[l][c]='O';//preenche coluna superior com O
            }
            if(l>=0 && (c==0 || c==9))
            {
                brinq[l][c]='O'; //preenche primeira coluna lateral com O
            }
        }
    }
}
//------------------------------------------------------------------------------------------
void movimentando_sinal_matriz() //ultima parte do exercicio movimentando sinal pela matriz
{
    int l, c, opcao, hor, vert, hAnt,vAnt;
    unsigned char escolha;
     
    brinq[9][4] = '+'; //coloca o + no centro da matriz
    clrscr();
    for(l=0;l<LINHAS;l++)
    { 
        // imprime a matriz na tela com o + no centro
        for(c=0;c<COLUNAS;c++)
        {
            printf("%c\t",brinq[l][c]);
        }
    }
    hor = 4; //variavel declarada para manipulação na horizontal do + na matriz recebendo 4 q é a coluna que representa o centro da matriz
    vert = 9;// variavel declarada para manipulação na vertical do + na matriz recebendo 9 que é a linha que representa o centro da matriz
    
    hAnt = hor;
    vAnt = vert;
    
    int imprime = 1;
    do  
    { // do para movimentar o + na matriz quando for igual a 1 sai do programa
        if (imprime)
        {
            imprime = 0;
            clrscr();
            for(l=0;l<LINHAS;l++)
            {
                //printf("\n");                                
                for(c=0;c<COLUNAS;c++)
                {
                    printf("%c\t",brinq[l][c]);
                }
            }
            printf("\n");
            printf("Digite um dos numeros para movimentar o + na matriz:\n4(esquerda)\t6(direita)\t8(cima)\t2(baixo)\t1(para sair)\n");
            printf("\n");
        }
        opcao = 0;
        if (kbhit())
            {
            escolha = getch();
            opcao = escolha - '0';    // converte texto em int
            
            if (opcao==2 || opcao==4 || opcao==6 || opcao==8)
                {
                // habilita o if que controla a impressao da matriz
                imprime = 1;
                // limpa a posição anterior do +
                brinq[vAnt][hAnt] = ' ';
                }
            }
        if(opcao == 4)
        { // opçao para movimentar o + para esquerda
            if(hor == 1)
                hor++;
            brinq[vert][--hor] = '+'; //matriz recebe o + já com hor subtraido para mostralo na posição antecessora
        }
        if(opcao == 6)
        {//mesmo esquema da opção 4 porem invertido
            if(hor == 8)
                hor--;
            brinq[vert][++hor] = '+';
        }
        if(opcao == 8)
        {
            if(vert == 1)
                vert++;
            brinq[--vert][hor] = '+'; //matriz vai receber o mais na coluna anteriror graçaas variavel vert que está sendo decremnetada
        }
        if(opcao == 2)
        {// mesmo esquema da posição 8 porem invertido
            if(vert == 18)
                vert--;
            brinq[++vert][hor] = '+';
        }
        // salva a posicao atual do +
        vAnt = vert;
        hAnt = hor;
    } while(opcao != 1);
}

CPP mano que código fino hein, o meu não chega nem aos pés do seus rsrsr...

to com algumas duvidas e já vo logo perguntando rsrsr...

-o DEFINE que voce usou, poderia me explicar sua definição e onde usou ele no codigo que não conseguir identificar?

-vi que para você preencher a matriz usou apenas 2 ifs, qual foi meu erro em usar tantos?

-unsigned char escolha, me explique o maximo que puder rsrsrs? e o kbhit() também

-vejo que voce declarou uma variavel imprime? não entendi muito bem o porque?

-e vi que você utilizou if(imprime), o que este if está comparando, ele imprime a matriz e comprara o que, não entendi muito bem essa parte?

-vi que voce criou uma variavel opcao, ok, ai depois vem as duvidas novamente o if(kbhit()) compara o que? E o escolha = getchar() o que significa? E tem opcao que é um int e voce fez opcao = escolha - '' apesar de ter o comnetario não entendi nada me explicque ai

-Na parte do if (opcao==2 || opcao==4 || opcao==6 || opcao==8) o que faz o imprime=1 e vi é que la que você apaga a posição anterior me explique essa parte do if por completo

por enquanto é só, a medida que for utilizando o debug e surgir mais duvidas te pergunto?

cara, muito obrigado

você é o cara rsrsr

t+

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Fabin,

Quantas dúvidas heim (rs)???

Como disse, eu usei coisas que talvez você ainda não conhecesse pra ter contato com elas e passar a usa-las.

Vamos ver se eu consigo esclarecer suas dúvidas.

o #define faz parte de um recurso chamado "pré-processamento", ele (e outras) são tratados pelo compilador antes de tratar o código.

No caso do define funciona assim:

#define LINHAS    20
#define COLUNAS 10

void preencheMatriz()
{
    int l, c;
    for(l=0;l<LINHAS;l++)
    {
        for(c=0;c<COLUNAS;c++)
Em tempo de compilação o código é interpretado como:
void preencheMatriz()
{
    int l, c;
    for(l=0;l<20;l++)
    {
        for(c=0;c<10;c++)

Ou seja, o compilador substitui as referencias pelo conteúdo definido em todo o código.

if(imprime) e if(kbhit()) podem ser traduzidas da seguinte forma:

if(imprime == 1) e if(kbhit() == true) ou if(kbhit() == 1)

A questão é que em C o conceito de verdadeiro e falso é:

0 (zero) é falso

Diferente de 0 (zero) é verdadeiro.

Então, quando faço if (imprime), se o conteudo de imprime for 0 (zero) o if não vai ser executado, mas se eu mudar o conteudo de imprime pra 1 o if passa a ser verdadeiro e é executado.

No caso do if(kbhit()) funciona da mesma forma só que eu não mudo o valor da função, mas eu testo o retorno que ela me dá.

Ou seja, se o usuário não digitar nenhuma tecla kbhit() vai me retorna 0 (zero) e o if interpreta como falso e não executa, mas quando o usuario digitar alguma coisa a funcao kbhit() me devolve 1 e o if passa a ser verdadeiro.

Cara, você fez muitas perguntas. Não vou responder todas agora beleza?

Vê se essas duas partes ficaram claras e ai a gente passa pras outras questões.

Abs

Link para o comentário
Compartilhar em outros sites

  • 0
Olá Fabin,

Quantas dúvidas heim (rs)???

Como disse, eu usei coisas que talvez você ainda não conhecesse pra ter contato com elas e passar a usa-las.

Vamos ver se eu consigo esclarecer suas dúvidas.

o #define faz parte de um recurso chamado "pré-processamento", ele (e outras) são tratados pelo compilador antes de tratar o código.

No caso do define funciona assim:

#define LINHAS    20
#define COLUNAS 10

void preencheMatriz()
{
    int l, c;
    for(l=0;l<LINHAS;l++)
    {
        for(c=0;c<COLUNAS;c++)
Em tempo de compilação o código é interpretado como:
void preencheMatriz()
{
    int l, c;
    for(l=0;l<20;l++)
    {
        for(c=0;c<10;c++)

Ou seja, o compilador substitui as referencias pelo conteúdo definido em todo o código.

if(imprime) e if(kbhit()) podem ser traduzidas da seguinte forma:

if(imprime == 1) e if(kbhit() == true) ou if(kbhit() == 1)

A questão é que em C o conceito de verdadeiro e falso é:

0 (zero) é falso

Diferente de 0 (zero) é verdadeiro.

Então, quando faço if (imprime), se o conteudo de imprime for 0 (zero) o if não vai ser executado, mas se eu mudar o conteudo de imprime pra 1 o if passa a ser verdadeiro e é executado.

No caso do if(kbhit()) funciona da mesma forma só que eu não mudo o valor da função, mas eu testo o retorno que ela me dá.

Ou seja, se o usuário não digitar nenhuma tecla kbhit() vai me retorna 0 (zero) e o if interpreta como falso e não executa, mas quando o usuario digitar alguma coisa a funcao kbhit() me devolve 1 e o if passa a ser verdadeiro.

Cara, você fez muitas perguntas. Não vou responder todas agora beleza?

Vê se essas duas partes ficaram claras e ai a gente passa pras outras questões.

Abs

opa ficou mais que claro entendi perfeitamente se puder responder o restante fico grato

avalews

t+

Link para o comentário
Compartilhar em outros sites

  • 0

Beleza.

Vamos lá então. (Parte II)

-vi que para você preencher a matriz usou apenas 2 ifs, qual foi meu erro em usar tantos?

Se voce observar os pontos abaixo vai perceber que a linha 1A e a 1B fazem exatamente a mesma coisa, a unica diferenca é a condição pra ela ser realizada.

Então dá pra juntas as duas condições num unico teste e realizar o código associado se for verdadeiro.

Para as linhas 2A e 2B a lógica é a mesma, já que elas se repetem dependendo da condicao eu otimizei o teste considerando que se "l" for maior que zero e a "c" for igual a 0 ou "c" for igual a nove, então executa o if.

Você deve ter percebido que eu coloco ' ' em todas as posições incondicionalmente antes dos if né. Fez isso só pra não ter mais uma condição (mais um if) dentro do for.

Essa parte de logica você aperfeiçoa com o tempo e muita pratica. O importante mesmo agora é chegar no resultado que você deseja dentro do seu programa.

char imprime_matriz_borda() //função para imprimir borda com O na matriz
{
    int linha=20, coluna=10, l, c;
    for(l=0;l<linha;l++){//for para imprimir linhas e colunas com O maisculo de acor com exercicio
            for(c=0;c<coluna;c++){
                    if(l==0){
(1A) ----------->  brinq[l][c]='O';//preenche coluna superior com O
                    }else{
                          if(l>=1 && c==0){
(2A) ----------->        brinq[l][c]='O'; //preenche primeira coluna lateral com O
                          }else{
                                if(l>=0 && c==9){
(2B) ----------->           brinq[l][c]='O';//preenche ultima coluna lateral com O
                                }else{
                                      if(l==19){
(1B) ----------->                 brinq[l][c]='O';//preenche ultima linha com O
                                      }else{
                                            brinq[l][c]=' ';
                                            }
                                      }
                               }
                               
                    }
                    printf("%c\t",brinq[l][c]); // imprime matriz completa na tela
            }
    }
    return brinq[linha][coluna];
}

-unsigned char escolha, me explique o maximo que puder rsrsrs? e o kbhit() também

O kbhit() eu já comentei certo? já o "unsigned char escolha" eu criei pra obter a tecla digitada pelo usuario e retornada pela funcao getch().

A funcao getch() lê um byte do teclado e não espera a digitação do <ENTER>. Usei ela ao invés de scanf() justamente pra tirar a necessidade do usuario ter que digitar um numero e ainda pressionar <ENTER>.

escolha = getch(). A funcao lê a tecla pressionada e armazena ela na varievel indicada.

-vi que voce criou uma variavel opcao. E tem opcao que é um int e voce fez opcao = escolha - '' apesar de ter o comnetario não entendi nada me explicque ai

int opcao já existia (voce criou)

Eu faço opcao = escolha (variavel que armazena a tecla pressionada pelo usuario) - '0';

O "escolha - '0'" é só pra converter o valor ASCII da tecla para o tipo "int". Tem uma logica envolvida ai, mas depois você me pergunta novamente ok.

-Na parte do if (opcao==2 || opcao==4 || opcao==6 || opcao==8) o que faz o imprime=1 e vi é que la que você apaga a posição anterior me explique essa parte do if por completo.

Nessa parte eu testo se a tecla digitada pelo usuario corresponde a alguma opcao que precisa exibir a tela novamente. Se sim eu coloco imprime em 1 pra o if ser executado na proxima passagem do laço while. E como eu sei que o "+" vai ser colocado na nova posicao já limpo a anterior.

Duvidas? É só falar.

Abs

Link para o comentário
Compartilhar em outros sites

  • 0
Beleza.

Vamos lá então. (Parte II)

-vi que para você preencher a matriz usou apenas 2 ifs, qual foi meu erro em usar tantos?

Se voce observar os pontos abaixo vai perceber que a linha 1A e a 1B fazem exatamente a mesma coisa, a unica diferenca é a condição pra ela ser realizada.

Então dá pra juntas as duas condições num unico teste e realizar o código associado se for verdadeiro.

Para as linhas 2A e 2B a lógica é a mesma, já que elas se repetem dependendo da condicao eu otimizei o teste considerando que se "l" for maior que zero e a "c" for igual a 0 ou "c" for igual a nove, então executa o if.

Você deve ter percebido que eu coloco ' ' em todas as posições incondicionalmente antes dos if né. Fez isso só pra não ter mais uma condição (mais um if) dentro do for.

Essa parte de logica você aperfeiçoa com o tempo e muita pratica. O importante mesmo agora é chegar no resultado que você deseja dentro do seu programa.

char imprime_matriz_borda() //função para imprimir borda com O na matriz
{
    int linha=20, coluna=10, l, c;
    for(l=0;l<linha;l++){//for para imprimir linhas e colunas com O maisculo de acor com exercicio
            for(c=0;c<coluna;c++){
                    if(l==0){
(1A) ----------->  brinq[l][c]='O';//preenche coluna superior com O
                    }else{
                          if(l>=1 && c==0){
(2A) ----------->        brinq[l][c]='O'; //preenche primeira coluna lateral com O
                          }else{
                                if(l>=0 && c==9){
(2B) ----------->           brinq[l][c]='O';//preenche ultima coluna lateral com O
                                }else{
                                      if(l==19){
(1B) ----------->                 brinq[l][c]='O';//preenche ultima linha com O
                                      }else{
                                            brinq[l][c]=' ';
                                            }
                                      }
                               }
                               
                    }
                    printf("%c\t",brinq[l][c]); // imprime matriz completa na tela
            }
    }
    return brinq[linha][coluna];
}

-unsigned char escolha, me explique o maximo que puder rsrsrs? e o kbhit() também

O kbhit() eu já comentei certo? já o "unsigned char escolha" eu criei pra obter a tecla digitada pelo usuario e retornada pela funcao getch().

A funcao getch() lê um byte do teclado e não espera a digitação do <ENTER>. Usei ela ao invés de scanf() justamente pra tirar a necessidade do usuario ter que digitar um numero e ainda pressionar <ENTER>.

escolha = getch(). A funcao lê a tecla pressionada e armazena ela na varievel indicada.

-vi que voce criou uma variavel opcao. E tem opcao que é um int e voce fez opcao = escolha - '' apesar de ter o comnetario não entendi nada me explicque ai

int opcao já existia (voce criou)

Eu faço opcao = escolha (variavel que armazena a tecla pressionada pelo usuario) - '0';

O "escolha - '0'" é só pra converter o valor ASCII da tecla para o tipo "int". Tem uma logica envolvida ai, mas depois você me pergunta novamente ok.

-Na parte do if (opcao==2 || opcao==4 || opcao==6 || opcao==8) o que faz o imprime=1 e vi é que la que você apaga a posição anterior me explique essa parte do if por completo.

Nessa parte eu testo se a tecla digitada pelo usuario corresponde a alguma opcao que precisa exibir a tela novamente. Se sim eu coloco imprime em 1 pra o if ser executado na proxima passagem do laço while. E como eu sei que o "+" vai ser colocado na nova posicao já limpo a anterior.

Duvidas? É só falar.

Abs

por enquanto esclareceu todas vou ler novamente, para fixar, mas tu é pocara brother ...

você ta estudando ou já é formado?

abraço

t+

Link para o comentário
Compartilhar em outros sites

  • 0

Sou um estudante atrasado, ainda correndo atrás do diploma.

Mas sou fã de C/C++ e estudei muito por conta.

Hoje desenvolvo aplicações embarcadas para equipamentos tipo POS (terminais que usam cartões de debito e credito em lojas).

Ainda to aprendendo muita coisa e por isso gosto de participar do forum.

Se tiver mais alguma dúvida e eu puder ajudar é só falar mano.

Abs

Link para o comentário
Compartilhar em outros sites

  • 0
Sou um estudante atrasado, ainda correndo atrás do diploma.

Mas sou fã de C/C++ e estudei muito por conta.

Hoje desenvolvo aplicações embarcadas para equipamentos tipo POS (terminais que usam cartões de debito e credito em lojas).

Ainda to aprendendo muita coisa e por isso gosto de participar do forum.

Se tiver mais alguma dúvida e eu puder ajudar é só falar mano.

Abs

brother você é to bom mesmo, parabens...

tenho muito que aprender e estudar para chegar no seu nivel, você tem alguma certificação?

abraço

t+

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...