Jump to content

Recommended Posts

Posted (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 by Angela_Santos
Adicionado o geshi
Posted

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.

Posted

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
Posted (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 by pmg
GeSHi adicionado; extra formatacao removida
Posted

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."

Posted

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.