Ir ao conteúdo
  • Cadastre-se

Drigs

Membro Júnior
  • Posts

    7
  • Cadastrado em

  • Última visita

Reputação

2
  1. O que deveria colocar ao invés de aux->prox != NULL ?? Deixando o p 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; }
  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. Drigs

    C Compila e para no meio

    #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. posso usar as letras invés dos números da tabela ASCII, pra indicar entre elas?
  6. eu sei, mas o exercício não pede isso, ele é introduzido somente com minusculas e o objetivo é colocar a primeira de toda palavra com maiúscula.
  7. 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...