1. Comentários Sobre a Prova

1.1. Usem strlen para contar o número de caracteres de uma string

int tamanho_palavra(char palavra[MAX]){
    int i;
    for(i = 0; palavra[i] != '\0'; i++) {};
    return i;
}
for(int i = 0; palavra[i] != '\0'; i++){
    tamanho++;
}
fgets(text, MAX, stdin);

while(text[len] != '\0'){
    len++;
}
len--;
  • Lembrem-se que fgets armazena o caractere \n na string

1.2. Usem strcmp para comparar strings

int comparar_strings(char string[], char string_revertida[], int tamanho_string) {
    for (int i = 0; i < tamanho_string; i++) {
        if (string[i] != string_revertida[i]) {
            return 0;
        }
    }
    return 1;
}

1.3. De forma geral

  • Vocês podem usar qualquer função que esteja em uma biblioteca da linguagem C, a menos que explicitamente dito o contrário. Em outras palavras, funções das bibliotecas stdio.h, stdlib.h, math.h, string.h, stdbool.h, limits.h são permitidas.

1.4. Nome de variável que não passa a ideia da intenção (ou passam uma ideia errada)

  • Variável palindromo é booleana.
  • Qualquer programador iria inferir que se palindromo = 1 =, então a palavra fornecida é um palíndromo.
  • Não é esse o comportamento no código abaixo.
#include <stdio.h>
#define max 100

int main(){
    char texto, vetor[max];
    int cont =0, palindromo = 0;

    while(scanf("%c",&texto) && texto != '\n'){
        vetor[cont] = texto;
        cont++;
    }

    for(int i =0;i<(cont/2 - 0.5);i++){
        if(vetor[i] != vetor[cont-1-i] ){
            palindromo = 1;
            break;
        }
    }

    if(palindromo == 1){
        printf("nao eh palindromo!\n");
    }else{
        printf("eh palindromo!\n");
    }

    return 0;
}

1.5. Praticamente todos erraram o tamanho de alocação da palavra

  • O tamanho necessário seria 101. Lembrem-se que precisamos de uma posição extra para armazenar o \0
#include <stdio.h>

#define MAX 100


int main() {
    //le palavra
    char palavra[MAX];

1.6. Problemas de Espaçamento

  • Muito espaçamento vertical também atrapalha a legibilidade do código
while (palavra[i] != '\0' && palavra[i] != '\n' ){//contabiliza o tamanho da string
    tamanho++;
    i++;


}

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


    if(palavra[i] != palavra[tamanho-i-1]){
        printf("nao eh palindromo!\n");
        return 0;

    }



}

1.7. Peculiaridades do fgets

  • fgets lê no máximo MAX - 1 caracteres (recebe uma string que comporta MAX caracteres)
  • fgets coloca o \n na string
#include <stdio.h>
#define MAX 100

void string_padrao(char string[MAX], char padrao[MAX]){
    for(int i = 0; string[i] != '\0' && string[i] != 10; i++){
        if(string[i] >= 'A' && string[i] <= 'Z'){
            padrao[i] = string[i] + 32;
        } else{
            padrao[i] = string[i];
        }
    }
}

int tamanho(char string[MAX]){
    int i;
    for(i = 0; string[i] != '\0'; i++){}
    return i;
}

int verifica_palindromo(char string[MAX]){
    int verificador = 0;
    for(int i = 0, j = tamanho(string) - 1; i < tamanho(string) && j >= 0; i++, j--){
        if(string[i] != string[j]){
            verificador = 1;
            break;
        }
    }
    return verificador;
}

int main() {
    char palavra[MAX], padrao[MAX];
    fgets(palavra, MAX, stdin);
    string_padrao(palavra, padrao);

    if(verifica_palindromo(padrao) == 0)
        printf("eh palindromo!\n");
    else
        printf("nao eh palindromo!\n");
    return 0;
}

1.8. Problema com espaçamento vertical

int verifica_linhas(int M[MAX][MAX], int n, int m){

    int k = 0, confirma = 0, soma;

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

        soma = 0;

        for (int j = 0; j<m; j++)
            soma += M[i][j];

        if (k == 0)
            k = soma;

        if (k != soma){

            confirma = 1;
            i = n;

        }   
    }
    return confirma;
}

int verifica_colunas(int M[MAX][MAX], int n, int m){

    int k = 0, confirma = 0, soma;

    for (int i = 0; i<m; i++){

        soma = 0;

        for (int j = 0; j<n; j++)
            soma += M[j][i];

        if (k == 0)
            k = soma;

        if (k != soma){

            confirma = 1;
            i = m;

        }   
    }

    if (confirma == 0)
        return verifica_linhas(M, n, m);
    else
        return confirma;
}

int matriz[n][m];

// realizando a leitura da matriz
for (int i = 0; i < n; i++){

    for (int j = 0; j < m; j++)

        scanf("%d", &matriz[i][j]);                     

}
//Recebe os valores da matriz   
for(int i = 0; i < n; i++){
    for(int j = 0; j < m; j++){

            scanf("%d", &matriz[i][j]);

    }
}
int main()
{   

    int n, m;
    scanf("%d", &n);
    scanf("%d", &m);
    int matriz[n][m]; 

    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < m; j++)
        {
            scanf("%d", &matriz[i][j]);
        }
    }

    int k = soma_primeira_linha(matriz, n);


    if(matriz_magica_lines(k, matriz, n, m) && matriz_magica_colums(k, matriz, n, m))
    {
        printf("MAGICA\n");
    }
    else
    {
        printf("FALTOU MAGIA\n");
    }

    return(0);

}
int main(){
    //definição da matriz;
    int m, n; 
    scanf("%d %d ", &n, &m);  
    int M[n][m];    
    for (int i =0; i < n; i++)
        for (int j =0; j < n; j++)
            scanf("%d ", &M[i][j]);
    //verificação da matriz;        
    if (verifica_matriz(n,m, M) == 1)
        printf("MAGICA\n");
    else 
        printf("FALTOU MAGIA\n");

return 0; 
}

verificamatriz:

  • se o retorno é != 1, a verificação deu certo?
  • imprime alguma mensagem na tela em caso de erro?
  • seria melhoar chamar essafuncao de eh_magica (ou ismagic )

Author: Maycon Sambinelli

Created: 2024-11-30 sáb 10:37

Validate