-
Posts
7 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
posts postados por Drigs
-
-
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; }
-
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 depoisResolvido, por causa que eles sempre volta a contagem pra zero no for
-
#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?
-
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
Claro que pode também deslocar toda a distância -16 como propostos. Fica essa solução como alternativa
adicionado 2 minutos depoisDepende mesmo do enunciado.
adicionado 4 minutos depoisIsso 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?
- 1
-
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.
-
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
Problemas com ponteiros e lista encadeada em C
em C/C#/C++
Postado
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: