Postado 24 de maio de 201016 anos comment_136294 Olá, boa tarde Estou com um problema em um exercício (não sei como faz)... Estou usando o Dev C++ Programa main.c ******************************************** CODE #include <stdio.h> #include <stdlib.h> #include "ListaDinamicaOrdenada.h" int main(){ testaLista(); system("PAUSE"); return 0; } ****************************************** Biblioteca C onde tudo acontece: ListaDinamicaOrdenada.h ***************************************** CODE struct no { int conteudo; struct no *prox; // Ponteiro - Estrutura Recursiva }; typedef struct no Lista; void imprimeLista (Lista *ini); void cria(Lista **ini) { *ini = NULL; } int vazia(Lista *p) { if (p == NULL) return 0; else return 1; } Lista *resto(Lista *p) { return p->prox; } int primeiro(Lista *p) { int x = p->conteudo; return x; } void insere (int x, Lista **p) { Lista *L = *p; Lista *nova; nova = malloc (sizeof (Lista)); nova->conteudo = x; // Se a lista estiver Vazia if (vazia(L) == 0) { nova->prox = NULL; *p = nova; // Se o item é menor ou igual ao primeiro } else if (nova->conteudo <= L->conteudo) { nova->prox = L; *p = nova; } else { Lista *ant = L; Lista *aux = ant->prox; do { //.. if (aux==NULL){ ant->prox=nova; nova->prox=NULL; } //.. // Se o item é maior que o iesimo elemento else if ((nova->conteudo <= aux->conteudo)) { nova->prox = aux; ant->prox = nova; aux = NULL; // Se o item e maior que todos elementos } else if (aux->prox == NULL) { aux->prox = nova; nova->prox = NULL; aux = NULL; // Anda na lista } else { ant = aux; aux = aux->prox; } } while (aux != NULL); } } void removerX (int x, Lista **p) { Lista *L = *p; if (vazia(L) == 0) { printf("\n Lista esta vazia!"); // se o elemento 'e menor que o primerio elemento ele não esta na lista } else if (x < L->conteudo) { printf("\n O elemento não esta na lista!"); // Se o elemento e igual ao primeiro ao elemento da lista } else if (x == L->conteudo) { Lista *morta; morta = L; L = morta->prox; free (morta); *p = L; } else { Lista *ant = L; Lista *morta = L->prox; while (morta != NULL) { if (x == morta->conteudo) { ant->prox = morta->prox; morta = NULL; } else { ant = morta; morta = morta->prox; } } free(morta); *p = L; } } int pertence(int x, Lista *p) { int a = 1; Lista *L = p; while (vazia(L) == 1) { if (primeiro(L) == x) { a = 0; L = NULL; } else { L = resto(L); } } return a; } int acessa(int ind, Lista *p) { Lista *L = p; while ((vazia(L) == 1) & (ind > 1)) { L = resto(L); ind--; } if (vazia(L) == 0 | ind < 1) return -1; else return (int) primeiro(L); } void destroi(Lista **p) { Lista *L = *p; while (L != NULL) { Lista *morta = L; L = resto(L); free(morta); } } void imprimeLista (Lista *ini) { printf("\n Lista: ["); Lista *p; for (p = ini; p != NULL; p = resto(p)) printf ("%d -> ", primeiro(p)); // printf("NULL]"); } void testaLista() { Lista *ini; cria(&ini); insere(300, &ini); imprimeLista(ini); insere(20, &ini); imprimeLista(ini); insere(10, &ini); imprimeLista(ini); insere(40, &ini); imprimeLista(ini); insere(4, &ini); insere(5, &ini); imprimeLista(ini); insere(400, &ini); imprimeLista(ini); insere(560, &ini); imprimeLista(ini); insere(42, &ini); imprimeLista(ini); //Entrando com os elementos da consulta int nr1, nr2; printf ("\n \n Digite um numero: "); scanf ("%d", &nr1); printf ("\n Digite outro numero: "); scanf ("%d", &nr2); printf ("\n\n Voce digitou os numeros: %d e %d \n", nr1, nr2); //Verificando se o elemento pertence a lista printf("\n O Elemento: %d ", nr1); printf("PERETENCE:%d ('0' Sim / '1' não) ", pertence(nr1, ini)); //Pertence ou não a lista printf("\n O Elemento: %d ", nr2); printf("PERETENCE:%d ('0' Sim / '1' não)\n \n ", pertence(nr2, ini)); //Pertence ou não a lista //Verificando o conteudo da posicao digitada int na1; printf ("\n\nDigite uma posicao na lista: "); scanf ("%d", &na1); printf ("\n\n\nVoce digitou os numeros: %d \n", na1); printf("\n 'ACESSA': O conteudo da posicao que você digitou e = %d \n", acessa(na1, ini)); //Acessa Posição1 2 na lista //REMOVER imprimeLista(ini); removerX(400, &ini); imprimeLista(ini); removerX(560, &ini); imprimeLista(ini); removerX(4, &ini); imprimeLista(ini); removerX(5, &ini); imprimeLista(ini); destroi(&ini); //Função Destroi a lista printf(" \n -- FIM -- \n"); } *************************************************** Enunciado: Trabalho 1: Implementar as seguintes funções na biblioteca de lista encadeada ordenada. 1) Função tamanho(L): Retorna quantidade de (nós) elementos na lista. 2) Função Soma(L): Soma os elementos de todos os nós. 3) Função Ultimo(L): Retorna o ultimo elemento da lista. 4) Função ocorrências(X,L): Retorna o numero de vezes que o elemento X aparece na lista. 5) Função iguais(A,: Recebe duas listas(A e e verifica se elas são iguais. 6) Função Junta(A,: Retorna a união dos elementos das listas A e B. Muito Obrigado pela ajuda!!!! Denunciar
Postado 24 de maio de 201016 anos comment_136301 Eita desespero, ainda bem que eu ja passei por isso, odeio C! Objective-c é mais suportavel, mas so pelo resultado ! hehehehe Denunciar
Postado 24 de maio de 201016 anos comment_136320 Caraca!!! Tem um botão para utilizar a tag code. Utilize. Quem sabe assim eu animo eu dar uma olhada... Ah! Escreva onde está tendo o problema, tb. Editado 24 de maio de 201016 anos por franzSilva Denunciar
Postado 24 de maio de 201016 anos Autor comment_136325 #include <stdio.h> #include <stdlib.h> #include "ListaDinamicaOrdenada.h" int main(){ testaLista(); system("PAUSE"); return 0; } #include <stdio.h> #include <stdlib.h> #include "ListaDinamicaOrdenada.h" int main(){ testaLista(); system("PAUSE"); return 0; } ****************************************** Biblioteca C onde tudo acontece: ListaDinamicaOrdenada.h ***************************************** CODE struct no { int conteudo; struct no *prox; // Ponteiro - Estrutura Recursiva }; typedef struct no Lista; void imprimeLista (Lista *ini); void cria(Lista **ini) { *ini = NULL; } int vazia(Lista *p) { if (p == NULL) return 0; else return 1; } Lista *resto(Lista *p) { return p->prox; } int primeiro(Lista *p) { int x = p->conteudo; return x; } void insere (int x, Lista **p) { Lista *L = *p; Lista *nova; nova = malloc (sizeof (Lista)); nova->conteudo = x; // Se a lista estiver Vazia if (vazia(L) == 0) { nova->prox = NULL; *p = nova; // Se o item é menor ou igual ao primeiro } else if (nova->conteudo <= L->conteudo) { nova->prox = L; *p = nova; } else { Lista *ant = L; Lista *aux = ant->prox; do { //.. if (aux==NULL){ ant->prox=nova; nova->prox=NULL; } //.. // Se o item é maior que o iesimo elemento else if ((nova->conteudo <= aux->conteudo)) { nova->prox = aux; ant->prox = nova; aux = NULL; // Se o item e maior que todos elementos } else if (aux->prox == NULL) { aux->prox = nova; nova->prox = NULL; aux = NULL; // Anda na lista } else { ant = aux; aux = aux->prox; } } while (aux != NULL); } } void removerX (int x, Lista **p) { Lista *L = *p; if (vazia(L) == 0) { printf("\n Lista esta vazia!"); // se o elemento 'e menor que o primerio elemento ele não esta na lista } else if (x < L->conteudo) { printf("\n O elemento não esta na lista!"); // Se o elemento e igual ao primeiro ao elemento da lista } else if (x == L->conteudo) { Lista *morta; morta = L; L = morta->prox; free (morta); *p = L; } else { Lista *ant = L; Lista *morta = L->prox; while (morta != NULL) { if (x == morta->conteudo) { ant->prox = morta->prox; morta = NULL; } else { ant = morta; morta = morta->prox; } } free(morta); *p = L; } } int pertence(int x, Lista *p) { int a = 1; Lista *L = p; while (vazia(L) == 1) { if (primeiro(L) == x) { a = 0; L = NULL; } else { L = resto(L); } } return a; } int acessa(int ind, Lista *p) { Lista *L = p; while ((vazia(L) == 1) & (ind > 1)) { L = resto(L); ind--; } if (vazia(L) == 0 | ind < 1) return -1; else return (int) primeiro(L); } void destroi(Lista **p) { Lista *L = *p; while (L != NULL) { Lista *morta = L; L = resto(L); free(morta); } } void imprimeLista (Lista *ini) { printf("\n Lista: ["); Lista *p; for (p = ini; p != NULL; p = resto(p)) printf ("%d -> ", primeiro(p)); // printf("NULL]"); } void testaLista() { Lista *ini; cria(&ini); insere(300, &ini); imprimeLista(ini); insere(20, &ini); imprimeLista(ini); insere(10, &ini); imprimeLista(ini); insere(40, &ini); imprimeLista(ini); insere(4, &ini); insere(5, &ini); imprimeLista(ini); insere(400, &ini); imprimeLista(ini); insere(560, &ini); imprimeLista(ini); insere(42, &ini); imprimeLista(ini); //Entrando com os elementos da consulta int nr1, nr2; printf ("\n \n Digite um numero: "); scanf ("%d", &nr1); printf ("\n Digite outro numero: "); scanf ("%d", &nr2); printf ("\n\n Voce digitou os numeros: %d e %d \n", nr1, nr2); //Verificando se o elemento pertence a lista printf("\n O Elemento: %d ", nr1); printf("PERETENCE:%d ('0' Sim / '1' não) ", pertence(nr1, ini)); //Pertence ou não a lista printf("\n O Elemento: %d ", nr2); printf("PERETENCE:%d ('0' Sim / '1' não)\n \n ", pertence(nr2, ini)); //Pertence ou não a lista //Verificando o conteudo da posicao digitada int na1; printf ("\n\nDigite uma posicao na lista: "); scanf ("%d", &na1); printf ("\n\n\nVoce digitou os numeros: %d \n", na1); printf("\n 'ACESSA': O conteudo da posicao que você digitou e = %d \n", acessa(na1, ini)); //Acessa Posição1 2 na lista //REMOVER imprimeLista(ini); removerX(400, &ini); imprimeLista(ini); removerX(560, &ini); imprimeLista(ini); removerX(4, &ini); imprimeLista(ini); removerX(5, &ini); imprimeLista(ini); destroi(&ini); //Função Destroi a lista printf(" \n -- FIM -- \n"); } blz ... vlw toda ajuda é bem vinda.... Trabalho 1: Implementar as seguintes funções na biblioteca de lista encadeada ordenada. 1) Função tamanho(L): Retorna quantidade de (nós) elementos na lista. 2) Função Soma(L): Soma os elementos de todos os nós. 3) Função Ultimo(L): Retorna o ultimo elemento da lista. 4) Função ocorrências(X,L): Retorna o numero de vezes que o elemento X aparece na lista. 5) Função iguais(A,: Recebe duas listas(A e e verifica se elas são iguais. 6) Função Junta(A,: Retorna a união dos elementos das listas A e B. Denunciar
Postado 24 de maio de 201016 anos comment_136326 Ou seja, você não tem a mínima idéia por onde começar. A noite dou uma olhada pra ti, e implemento uma das funções para você ver. Denunciar
Postado 24 de maio de 201016 anos comment_136337 1)Faz um while percorrendo a lista(até prox == null) e somando UM a cada iteração. 2)O mesmo laço só que acumulando o valor dos elementos. ... Enfim, quando tu conseguir fazer o laço que percorre a lista estará tudo resolvido. No próprio código tem um exemplo: "for (p = ini; p != NULL; p = resto(p))" Sinceramente, fazer isso com um "for" não é a forma mais elegante, faça com um "while". Denunciar
Postado 24 de maio de 201016 anos comment_136341 bom, minha ideia de vc utilizar o tag code era para poder ver um código mais legível. Para ser mais preciso, identado. acho que a galera aqui, tem pouco tempo livre, mas gosta de ajudar, então se puder identar o código ajuda bastante. onde mesmo vc tem problema? não tem problema? não sabe por onde começar? Bons estudos... Denunciar
Postado 25 de maio de 201016 anos comment_136443 1)Faz um while percorrendo a lista(até prox == null) e somando UM a cada iteração.2)O mesmo laço só que acumulando o valor dos elementos. ... Eu ia sugerir a mesma coisa, percorrendo a lista desse jeito vc consegue resolver ate o item 4 sem problemas, tenta implementar e depois posta os resultados Denunciar
Participe do debate
Você pode postar agora e se registrar depois. Se você tem uma conta, entre agora para postar com ela.