Ir ao conteúdo
  • Cadastre-se

Drigs

Membro Júnior
  • Posts

    7
  • Cadastrado em

  • Última visita

posts postados por Drigs

  1. O que deveria colocar ao invés de aux->prox != NULL ??

    Deixando o da main em NULL realmente resolveu, mas como você falou o search não funcionou e porque todas as funções tem esse problema? Os for's estão errado?

    Obrigado pela resposta!

     

    Edit 1: o search está funcionando sim, mas o problema agora é que a lista "comeu" o primeiro elemento colocado, que no caso foi o 100.

    Saída:

    104

    103

    102

    101

     

    Edit 2: Já resolvi o problema era no for que eu coloquei aux->prox != NULL, e estava apontando direto pro 101 e pulando o 100, resolvi colocando aux != NULL

    Saída:

    104

    103

    102

    101

    100

     

    Segue o código certo:

     

    #include <stdio.h>
    #include <stdlib.h>
    
    struct no {
      int dta;
      struct no* prox;
    };
    
    void insert(int v, struct no** l){
    	struct no* aux;
    	if(*l == NULL){
    		*l = (struct no*)malloc(sizeof(struct no));
    		(*l)->dta=v;
    		(*l)->prox=NULL;
    	}
    	else{
    		aux = (struct no*)malloc(sizeof(struct no));
    		aux->dta=v;
    		aux->prox=*l;
    		*l=aux;
    	}
    }
    
    void retract(struct no** l){
    	struct no* aux;
    	if(*l == NULL) return;
    	else{
    		aux=*l;
    		*l = (*l)->prox;
    		free(aux);
    	}
    }
    
    void lista( struct no* l ){
    	struct no* aux;
    	for(aux = l; aux != NULL; aux = aux->prox){
    		printf("%d\n", aux->dta);
    	}
    	printf("\n");
    }
    
    int size( struct no* l ){
    	struct no* aux;
    	int x;
    	for(aux = l; aux != NULL; aux = aux->prox){
    		x=x+1;
    	}
    	return x;
    }
    
    int search( int v, struct no* l ){
    	struct no* aux;
    	int x=0;
    	for(aux = l; aux != NULL; aux = aux->prox){
    		if(v == aux->dta) x=x+1;
    		else x=x+0;
    	}
    	return x;
    }
    
    
    int main(){
    	struct no* p;
    	int x,y;
    	
    	p = NULL;
    	insert(100, &p);
    	insert(101, &p);
    	insert(102, &p);
    	insert(103, &p);
    	insert(104, &p);
    	insert(105, &p);
    	retract(&p);
    	lista(p);
    	
    	x = size(p);
    	printf("TAMANHO = %d inteiros\n", x);
    	printf("\n");
    	
    	y = search(100,p);
    	if(y==0) printf("100 nao existe na lista\n");
    	else printf("100 existe na lista\n");
    	printf("\n");
    	
    	y = search(105,p);
    	if(y==0) printf("105 nao existe na lista\n");
    	else printf("105 existe na lista\n");
    	printf("\n");
    	
    	return 0;
    }

     

    • Curtir 1
  2. EXERCÍCIO

    A partir da estrutura nó abaixo, construa as funções solicitadas:

    struct no {  
      int dta;
      struct no* prox;
    };

    1) Uma função para inserir um inteiro no início da lista.

    2) Uma função para retirar da lista o primeiro elemento.

    3) Uma função para listar todos os dados armazenados na lista.

    4) Uma função para retornar o número de nós da lista.

    5) Uma função que verifica se um determinado valor se encontra na lista, retornando 0 (zero) caso o valor não seja encontrado e um valor diferente de 0 caso o valor se encontre na lista.

    As funções devem ter os seguintes cabeçalhos:

    void insert( int v, struct no** l );
    void retract( struct no** l );
    void lista( struct no* l );
    int size( struct no* l );
    int search( int v, struct no* l );

     

    Inserir os inteiros, retirar e listar estão funcionando, mas após listar o programa para, talvez seja o for em loop, se sim não como arrumar, o for em questão é esse:   

       for(aux = l; aux->prox != NULL; aux = aux->prox)

     

    Alguém para ajudar? :)

     

    Segue o Código:

    #include <stdio.h>
    #include <stdlib.h>
    
    struct no {
      int dta;
      struct no* prox;
    };
    
    void insert(int v, struct no** l){
        struct no* aux;
        if(*l == NULL){
            *l = (struct no*)malloc(sizeof(struct no));
            (*l)->dta=v;
            (*l)->prox=NULL;
        }
        else{
            aux = (struct no*)malloc(sizeof(struct no));
            aux->dta=v;
            aux->prox=*l;
            *l=aux;
        }
    }
    
    void retract(struct no** l){
        struct no* aux;
        if(*l == NULL) return;
        else{
            aux=*l;
            *l = (*l)->prox;
            free(aux);
        }
    }
    
    void lista( struct no* l ){
        struct no* aux;
        for(aux = l; aux->prox != NULL; aux = aux->prox){
            printf("%d\n", aux->dta);
        }
    }
    
    int  size( struct no* l ){
        struct no* aux;
        int x;
        for(aux = l; aux->prox != NULL; aux = aux->prox){
            x=x+1;
        }
        return x;
    }
    
    int  search( int v, struct no* l ){
        struct no* aux;
        int x=0;
        for(aux = l; aux->prox != NULL; aux = aux->prox){
            if(v == aux->dta) x=x+1;
            else x=x+0;
        }
        return x;
    }
    
    
    int main(){
        struct no* p;
        int x,y,z;
        
        insert(100, &p);
        insert(101, &p);
        insert(102, &p);
        insert(103, &p);
        insert(104, &p);
        insert(105, &p);
        retract(&p);
        lista(p);
        x = size(p);
        y = search(100,p);
        z = search(105,p);
        
        printf("TAMANHO = %d\n", x);
        printf("EXISTE NA LISTA = %d\n", y);
        printf("EXISTE NA LISTA = %d\n", z);
        
        return 0;
    }

     

  3. Defina uma struct Filme que armazene informações sobre um filme. A struct deve conter os seguintes campos:

     Título

     Categoria

     Ano

     Classificação

    O campo “Classificação” armazena um inteiro de 1 a 5, o qual indica quanto o usuário gosta de tal filme. Considere que quanto maior for o valor do campo “Classificação”, maior é a preferência do usuário pelo filme. Após definir a struct, escreva um algoritmo que leia as informações para N structs Filme e as armazene em um vetor de struct. Em sequência, o programa deve pedir que o usuário informe um número inteiro, o qual indica um nível de classificação X. Então, o programa deve percorrer o vetor de filmes e imprimir todos os campos dos filmes que possuírem classificação maior ou igual ao nível X.  

     

    //Na hora de executar, ele não me da os dados de todos filmes com classificação maior ou igual e sim apenas da ultima informação dada, se ele é maior ele me da informação, se não ele não me retorna nada e o programa termina.

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    typedef struct cinema{
        char titulo[50];
        char categoria[50];
        int ano;
        int clas;
    }t_cinema;
    
    t_cinema filme[100];
    
    int main(){
        
        int i, x, n=1, c=0, j;
        
        while(n!=0){
            for(i=0; i<n; i++){
                strcpy(filme.titulo, "\0");
                strcpy(filme.categoria, "\0");
                filme.ano = 0000;
                filme.clas = 0;
        
                printf("\n    Sobre o Filme \n");
                printf("Nome: ");
                scanf("%s", filme.titulo);
                printf("Categoria: ");
                scanf("%s", filme.categoria);
                printf("Ano: ");
                scanf("%d", &filme.ano);
                printf("Classificacao de 1 a 5: ");
                scanf("%d", &filme.clas);
        
                c++;
            }
            printf("voce quer continuar? (1) p/ SIM  (0) p/ NAO = ");
            scanf("%d", &n);
        }
        
        printf("\nNivel de classificacao X de 1 a 5: ");
        scanf("%d", &x);
        
        for(j=0; j<c; j++){
            if(x <= filme[j].clas){
                printf("\n    Sobre o Filme: \n");
                printf("Nome: %s\n", filme[j].titulo);
                printf("Categoria: %s\n", filme[j].categoria);
                printf("Ano: %d\n", filme[j].ano);
                printf("Classificacao de 1 a 5: %d\n", filme[j].clas);
            }
        }
        
        return 0;
    } 
    adicionado 8 minutos depois

    Resolvido, por causa que eles sempre volta a contagem pra zero no for 

  4. #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    typedef struct futebol{
        char nome[100];
        int idade;
        int jogos;
        int gols;
    }t_futebol;
    
    t_futebol jogador;
    
    int main(){
        strcpy(jogador.nome, "\0");
        jogador.idade = 0;
        jogador.jogos = 0;
        jogador.gols = 0;
        
        printf("O nome do jogador: ");
        scanf("[^\n]", jogador.nome);
        
        printf("A idade do jogador: "); 
        scanf("%d", &jogador.idade);
        
        printf("Numero de jogos do jogador: ");
        scanf("%d", &jogador.jogos);
        
        printf("Numero de gols do jogador: ");
        scanf("%d", &jogador.gols);
        
        return 0;
    }

     

    Executa apenas o jogador.nome e código acaba, alguém sabe o porque?

  5. 14 minutos atrás, AnsiC disse:

    Algo a ir pensando desde de agora, inclusive investigando se é ou não maiúscula da inicio a solução do problema, pois a distancia entre Z - A é igual a distância entre a - z. Com isso basta obter a diferença e somar:

     

    Seja x:= frase[0]

    Se A <= x <= Z: x é maiúscula nada se fazer

    Se a <= x <= z: então faça: x = x-a + A.

    Resolvido :thumbsup:

    Claro que pode também deslocar toda a distância -16 como propostos. Fica essa solução como alternativa

    adicionado 2 minutos depois

    Depende mesmo do enunciado.

    adicionado 4 minutos depois

    Isso só facilitou, basta agora saber quais os recursos que podem e devem ser usados, segundo o enunciado. 

    posso usar as letras invés dos números da tabela ASCII, pra indicar entre elas?

    • Curtir 1
  6. Na tabela ASCII letra maiúsculas e minusculas são distanciadas por 32 posições então criei um if para diminuir 32 toda vez que tivesse um espaço e outro if para para a primeira posição diminuir 32, mas o if da primeira posição não funcionava então coloquei -16 e deu certo alguém poderia me explicar o porque e se tem algo desnecessário ou talvez uma forma melhor de se resolver, mas lembrem-se sem funções!!! 

    #include <stdio.h>
    #include <string.h>
    
    int main(){   
     
        int i;    
        char frase[50]; 
           
        printf("Escreva a frase: ");    
        scanf("%[^\n]", frase);    
        
        for(i = 0; i < 50; i++){
            if(frase[0]){
                frase[0]= frase[0] - 16; //aqui esta o erro//
            }     
            if(frase== ' '){
            frase[i+1] = frase[i+1] - 32;
            }
        }
            
        printf("\nFrase convertida = %s\n", frase);
        
        return 0;
    } 

     

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!