Angela_Santos Posted July 3, 2012 at 04:51 PM Report #467044 Posted July 3, 2012 at 04:51 PM (edited) Neste programa presiso de Altera o programa para que peça um inteiro em vez de uma string. Altera o programa para perguntar quantos valores quer inserir e insere no fim da lista o nº de elementos pedidos, fazendo as adaptações necessárias. O programa já efetua a pesquisa de um valor. Pergunte ao utilizador qual o novo valor e substitua pelo anterior. Efetue a media de todos os valores da lista . #include <stdio.h> #include <string.h> #include <malloc.h> typedef struct no { char dado[30]; struct no *proximo; } no; no *primeiro = NULL; no *ultimo = NULL; no *alocar; no * buscar(char *dado) { no *ponteiro; ponteiro = primeiro; while ((ponteiro)&&(strcmp(dado, ponteiro->dado)!=0)) { ponteiro = ponteiro->proximo; } return ponteiro; } void inserirAoFinal(char *dado) { alocar = (struct no *) malloc(sizeof(struct no)); if (!alocar) { printf("Falta de memória"); exit(0); } strcpy(alocar->dado, dado); if (!primeiro) { primeiro = alocar; ultimo = alocar; } else { ultimo->proximo = alocar; ultimo = alocar; } ultimo->proximo = NULL; } void imprimir() { no *ponteiro = primeiro; while (ponteiro) { printf("\n%s", ponteiro->dado); ponteiro = ponteiro->proximo; } } int main() { char dado[30]; printf("\nInserir: "); gets(dado); inserirAoFinal(dado); printf("\nInserir: "); gets(dado); inserirAoFinal(dado); printf("\nInserir: "); gets(dado); inserirAoFinal(dado); printf("\nInserir: "); gets(dado); inserirAoFinal(dado); imprimir(); printf("\nInserir para buscar: "); gets(dado); printf("%p", buscar(dado)); getchar(); } Edited July 3, 2012 at 05:03 PM by Angela_Santos Adicionado o geshi
pwseo Posted July 3, 2012 at 05:02 PM Report #467048 Posted July 3, 2012 at 05:02 PM Angela_Santos, Parece-me que precisas de criar um ciclo na tua função main, dentro do qual irás pedir ao utilizador para introduzir o dado e farás a sua inserção na lista ligada com a função inserirAoFinal(). Não percebi a parte pesquisar e de substituir um valor por outro... De qualquer modo, não te esqueças que no final tens que fazer a média de todos os valores... o que me leva a colocar a seguinte questão: se calhar o tipo de no.dado é um int e não char[30], não? Posso estar a perceber mal, claro.
HappyHippyHippo Posted July 3, 2012 at 05:36 PM Report #467054 Posted July 3, 2012 at 05:36 PM estes serão os passos que terás de alterar para teres uma aplicação aceitável - alterar todas as referências ao dado de strings para inteiro //char dado[30]; int dado; - alterar a chamada gets por uma que te devolva um número : exemplo o scanf - a inserção de valores na tua lista deverá ser realizada dentro de um ciclo. - a condição de paragem deste ciclo poderá ser : ler o valor 0, ou perguntar primeiro quantos elementos vai inserir, etc - realizar um ciclo final que percorra todos os elementos da lista e efetuar a soma acumulativa dos valores guardados assim como contabilizar quantos elementos existem - no final será necessário apresentar a média com o auxilio dos dois valores calculados anteriormente - na função buscar terás de alterar o método de comparação de valores de elementos pois já não tens strings mas sim valores numéricos depois disso, ainda existem muitas alterações para ficar bem - retirar o cast explícito da função malloc, isso é uma ação que pode esconder problemas - usar um método mais seguro de ler valores do teclado, como o uso da combinação fgets/sscanf - passar a declaração da variável global alocar para a função inserirAoFinal pois só tem sentido ai - passar as variáveis globais restantes para a função main e passar estes ponteiros como argumentos das funções existentes - criar uma rotina de limpeza que liberta a memória alocada através da função malloc com o uso da função free isto foi muito rapidamente ... espero ter ajudado IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Angela_Santos Posted July 3, 2012 at 09:23 PM Author Report #467131 Posted July 3, 2012 at 09:23 PM (edited) Para fazer a média como fasso? #include <stdio.h> #include <string.h> #include <malloc.h> typedef struct no { int dado; struct no *proximo; } no; no *primeiro = NULL; no *ultimo = NULL; no *alocar; no * buscar(int ABC) { no *ponteiro; ponteiro = primeiro; while ((ponteiro->dado)&&(ABC)) { ponteiro = ponteiro->proximo; } return ponteiro; } void inserirAoFinal(int *dado) { alocar = malloc(sizeof(struct no)); if (!alocar) { printf("Falta de memória"); exit(0); } (alocar->dado, dado); if (!primeiro) { primeiro = alocar; ultimo = alocar; } else { ultimo->proximo = alocar; ultimo = alocar; } ultimo->proximo = NULL; } void imprimir() { no *ponteiro = primeiro; while (ponteiro) { printf("\n%d", ponteiro->dado); ponteiro = ponteiro->proximo; } } int menu() { char resp; int opcao, i; printf("1- Inserir ao final\n\n"); printf("2- Imprimir\n\n"); printf("3- sair \n\n"); scanf("%d", &opcao); return(opcao); } /*float medianr(int dado) { */ int main() { int dado; int dadoss; int i, op; char resp; inicio: op=menu(); switch (op) { case 1:inserirAoFinal(dado); printf("Quantos dados quer inserir?"); scanf("%d", &dadoss); for(i=0;i<dadoss;i++) { printf("\nInserir: "); scanf("%d", &dado); } break; case 2:imprimir(); printf("\nInserir para buscar: "); scanf("%d", &dado); printf("%p", buscar(dado)); break; case 3:printf("Quer mesmo sair carregue s ou n?"); fflush(stdin); resp = getchar(); resp= tolower(resp); if (resp=='s') system("pause"); else goto inicio; default: printf("Escolha um numero entre 1 e 6"); } getchar(); } Edited July 3, 2012 at 09:29 PM by pmg GeSHi adicionado; extra formatacao removida
pikax Posted July 3, 2012 at 09:38 PM Report #467134 Posted July 3, 2012 at 09:38 PM Para fazer a média como fasso? a media e' a soma de todos os valores a dividir pelo o numero de valores int main() { int i; int soma=0; int aux; int media=0; int num=10; //numero de valores for(i=0;i<num;i++) { scanf("%d", &aux); soma=soma+aux; } media=soma/num; printf("a media dos valores e' igual a %d\n",media); } Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender. A beleza de um código está em decompor problemas complexos em pequenos blocos simples. "learn how to do it manually first, then use the wizzy tool to save time." "Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."
HappyHippyHippo Posted July 4, 2012 at 08:59 AM Report #467205 Posted July 4, 2012 at 08:59 AM Para fazer a média como fasso? - realizar um ciclo final que percorra todos os elementos da lista e efetuar a soma acumulativa dos valores guardados assim como contabilizar quantos elementos existem - no final será necessário apresentar a média com o auxilio dos dois valores calculados anteriormente IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now