Ir para conteúdo
Fórum Script Brasil
  • 0

Cadastro de uma lista simples


Guest --Thiago --

Pergunta

Guest --Thiago --

Galera,

Tenho um serio problema em desenvolver em C mas com o tempo vou conseguir porém preciso da ajuda de alguém preciso fazer um programinha besta e facil.

Tenho que criar uma lista pode ser com 10 pessoas cadastradas para um BANCO onde elas vão

1- sacar, depositar e ver saldo cada operação leva 1 minuto, NÃO PRECISA FAZER UMA FUNÇAO que faça estas operações É apenas definir que cada operação vale 1 minuto.

2- idosos ou gravidas tem preferencia ou seja como é uma lista se cadastar uma pessoa e no cadastro for identificado que a pessoa tem mais de 50 anos ou esta gravida ela entra no inicio da lista o resto vai entrando no final da fila.

3- imprir esta lista e o tempo que cada uma ficou na fila sendo que já esta definido 1 minuto para cada uma das operações.

Lista SIMPLEs ligada tem que ser.

Conto de verdade com a ajuda de vocês pois preciso entregar para nota

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Espero que tenha começado o trabalho, se você não postar o código de onde está tendo dificuldades...fica dificil mesmo...

Fazer pra você ninguém vai, pode tirar o cavalinho da chuva.

Espero também que o professor tenha passado o exercício hj e não que o exercício tenha que ser entregado para hj ou amanhã.

Fazer o exercício no último dia de entrega, ou faltando poucos dias para entregar, é um luxo que apenas quem sabe programar na linguagem pode ter. Quanto menos sabe, mais cedo deve tentar fazer o exercício.

Comece, o pessoal aqui tentará ajudar numa eventual dúvida.

Link para o comentário
Compartilhar em outros sites

  • 0

Segue abaixo o código no qual estou tentando desenvolver a aplicação

#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
#include<string.h>

//defini‡ao da estrutura
typedef struct elemento {
 struct elemento *prox;
 int info;
 } no;

struct cadastro{
  char nome[20];
  int idade[3];
  int cond[1];
  int cod[1];
};
struct cadastro vetor[5];


//cria‡ao dos ponteiros
 no *inicio, *fim, *aux, *novo, *aux1;
 int criado=0;

 //prototipos
 void criar();
 void imprimir();

 int i;

  //corpo principal do software
 void main(){

     char i;
     int ax, axinfo;
     clrscr();
     while(i !='\n'){
    printf("(1)- Criar uma lista \n");
    printf("(2)- Cadastro de pessoas \n");
    printf("(3)- Tipo da opera‡ao bancaria \n");
    printf("(4)- Exibir a lista \n");
    printf("(5)- Quanto tempo gastou cada pessoa na fila \n");
    printf("(S)- Sair do sistema \n");
    i= getch();

    switch(i){

    case '1':
    criar();
    getch();
    clrscr();
    break;

    case '2':


    for(i=0; i < 6; i ++){
    if(criado==1){
    printf("Digite o nome do cliente: \n");
    gets(vetor[i].nome);
    flushall();
    printf("Digite a idade: \n");
    scanf("%d",vetor[i].idade);
    flushall();
    printf("Se esta gravida digite ou tem mais de 50 anos digite (1)? \n");
    scanf("%d",vetor[i].cond);
    flushall();
    printf("Digite 1 para sacar, 2 para ver saldo, 3 para depositar");
    scanf("%d",vetor[i].cod);
    flushall();
    }

     if(vetor[i].cond){
        inicio=fim=novo;
        novo -> prox = NULL;

      }
       else{
         novo -> prox = inicio;
         inicio = novo;
      }

//insere no final

        if(vetor[i].cond == 0){
          inicio=fim=novo;
          novo -> prox = NULL;
        }
        else
        {
            novo -> prox = NULL;
            fim->prox = novo;
            fim = novo;
        }

    }

    break;

  //    case '3':
  //    operacao();
 //    getch();
 //    clrscr();
  //    break;

    case '4':
    imprimir();
    getch();
    clrscr();
    break;

  //    case '5':
  //    tempogasto();
  //    getch();
  //    clrscr();
  //    break;

    case 's':
    exit(0);
    }
 }
}
  void criar(){
    inicio=fim=NULL;
    criado=1;
    printf("Lista Criada");
}


void imprimir()
{
    aux = inicio;

     if(aux != NULL){
    while( aux != NULL )
    {
        printf("%d\t", aux -> vetor[] );
        aux = aux -> prox;
    }
    printf("\n\n");
     }
     else
    printf("Lista Vazia");

  printf("\n");
}

Minha dificuldade esta em como fazer unir as coisas ou seja fazer a soma do tempo que cada um ficou na fila e imprimir e colocar no inicio e no fim da fila de acordo como o solicitado idosos e gravidas inicio da fila o resto entra no fim da fila e cada operação bancaria tem 1 minuto não precisa fazer as funçoes apenas definir que cada um que for no banco perguntar o que vai fazer e somar as operaçoes.

Link para o comentário
Compartilhar em outros sites

  • 0

Olha cara, vou dar uma sugestão. Tente simplificar ao máximo o seu problema, está usando vetores demais, ponteiros demais...

int idade[3];
int cond[1];
int cod[1];

Para que criar vetores ali?

Seguinte, você não precisa usar a operação criar lista. Faça 4 funções com 4 operações apenas:

1 - Cadastrar usuario

2 - Operação bancária

3 - Exibe Lista

4 - Tempo total

Sendo cada uma delas uma função. Use apenas duas variáveis globais do tipo ponteiro, uma para o início e outra para o fim da fila. Aponte-os para NULL na inicialização. Crie uma variável int também para contar quantos cadastros foram feitos.

Use uma estrutura apenas que tenha no minimo:

int nome

int idade

int gravida

estrutura *prox

Fica mais fácil, eu acho. Simulando:

1- Função Cadastrar:

Cria um espaço na memória do tipo da estrutura e pergunta: Nome, idade, se é grávida.

A fila tá vazia? Se tiver, aponta o ponteiro do começo da fila para o elemento criado.

Se não tiver vazia:

Se não estiver cheia e elemento for idoso ou grávida,

pesquise do começo da fila até o fim.

Se o proximo elemento seguinte ao atual for grávida (estrutura.gravida ==1) ou idoso (estrutura.idade >= 50), pule para o próximo, senão, aponte o próximo do elemento criado para o próximo elemento atual, e aponte o proximo do elemento atual para o elemento recém criado.

Caso contrário, Se não estiver vazia e não for idoso nem grávida, insere elemento no *fim da fila.

Vai fazendo aos poucos, crie uma função para cada uma das 4 operações. Despolua sua main. Deixa apenas um switch nela onde terá 4 cases, cada um chamando uma função: Cadastrar, operação bancária, exibe lista e tempo total.

É uma sugestão, estou partindo do princípio que postou exatamente o que o professor pediu, então estou omitindo informações desnecessárias para facilitar o algoritmo.

Não consegui executar seu código...dá uma melhorada..

Boa sorte, abraço.

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --thigraum --

Fiz as modificações e ficou mais ou menos assim porem não to conseguindo imprimir toda a lista apenas o primeiro elemento da lista onde esta errado ???

#include<stdlib.h>

#include<stdio.h>

#include<conio.h>

#include<string.h>

typedef struct pessoa {

char nome[40];

int idade;

char gravida[1];

int noperacoes;

struct pessoa *prox;

} no;

no *inicio, *novo, *fim, *aux;

int criado=0;

//----------protótipos------

void criar();

void imprimir();

void inserir();

void main(){

char i;

clrscr();

while(i != '\n')

{

printf(" (1)-Criar uma lista\n");

printf(" (2)-Imprimir a lista\n");

printf(" (3)-Inserir na lista\n");

printf(" (s)-Sair\n");

i=getch();

switch(i)

{

case '1':

criar();

getch();

clrscr();

break;

case '2':

imprimir();

getch();

clrscr();

break;

case '3':

inserir();

break;

case 's':

exit(0);

}

}

}

//-------------Função criar----------

void criar()

{

inicio = fim = NULL;

criado = 1;

printf("\n Lista Criada\n");

}

//------------Função Imprimir------------

void imprimir()

{

aux = inicio;

if(aux != NULL)

{

while( aux != NULL )

{

printf("%s\t", aux -> nome );

printf("%d\t", aux -> idade );

printf("%s\t", aux -> gravida );

printf("%d\t", aux -> noperacoes );

aux = aux -> prox;

}

printf("\n\n");

}

else

printf("Lista Vazia");

printf("\n");

}

//-----------Função inserir --------

void inserir()

{

if(criado == 1)

{

novo = (no *)malloc( sizeof( no ));

printf("Entre com o nome\n");

flushall();

gets(novo -> nome);

printf("Entre com a idade\n");

scanf("%d", &novo -> idade);

printf("Entre com S se for gravida e N caso contrario\n");

flushall();

gets(novo -> gravida);

printf("Entre com o numero de operacoes (1 a 3)\n");

scanf("%d", &novo -> noperacoes );

if( inicio == NULL )

{

inicio = fim = novo;

novo -> prox = NULL;

}

else

{

aux = inicio;

if(novo->idade>50 || novo->gravida[0] == 'S')

{

while(aux != NULL)

{

if (aux->idade > 50 || aux->gravida[0] == 'S')

{

aux = aux-> prox;

break;

}

else

{

novo->prox = aux->prox;

aux->prox = novo;

break;

}

aux=aux->prox;

}

}

else

{

while(aux == NULL)

{

novo->prox = aux->prox;

aux->prox = novo;

break;

}

}

}

}

else

{

printf("Crie a lista primeiro\n");

getch();

}

clrscr();

}

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Visitante

Fiz as modificações e ficou mais ou menos assim porem não to conseguindo imprimir toda a lista apenas o primeiro elemento da lista onde esta errado ???

#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
#include<string.h>

typedef struct pessoa {
    char nome[40];
    int idade;
    char gravida[1];
    int noperacoes;
    struct pessoa *prox;
} no;

no *inicio, *novo, *fim, *aux;
int criado=0;

//----------protótipos------
void criar();
void imprimir();
void inserir();

void main(){
    char i;
    clrscr();

    while(i != '\n')
    {
        printf(" (1)-Criar uma lista\n");
        printf(" (2)-Imprimir a lista\n");
        printf(" (3)-Inserir na lista\n");
        printf(" (s)-Sair\n");
        i=getch();

        switch(i)
        {
            case '1':
                criar();
                getch();
                clrscr();
                break;
            case '2':
                imprimir();
                getch();
                clrscr();
                break;
            case '3':
                inserir();
                break;
            case 's':
                exit(0);
        }
    }
}

//-------------Função criar----------
void criar()
{
    inicio = fim = NULL;
    criado = 1;
    printf("\n Lista Criada\n");
}

//------------Função Imprimir------------
void imprimir()
{
    aux = inicio;

    if(aux != NULL)
    {
        while( aux != NULL )
        {
            printf("%s\t", aux -> nome );
            printf("%d\t", aux -> idade );
            printf("%s\t", aux -> gravida );
            printf("%d\t", aux -> noperacoes );
            aux = aux -> prox;
        }
        printf("\n\n");
    }
    else
        printf("Lista Vazia");

    printf("\n");
}

//-----------Função inserir --------

void inserir()
{
    if(criado == 1)
    {
        novo = (no *)malloc( sizeof( no ));

        printf("Entre com o nome\n");
        flushall();
        gets(novo -> nome);
        printf("Entre com a idade\n");
        scanf("%d", &novo -> idade);
        printf("Entre com S se for gravida e N caso contrario\n");
        flushall();
        gets(novo -> gravida);
        printf("Entre com o numero de operacoes (1 a 3)\n");
        scanf("%d", &novo -> noperacoes );

        if( inicio == NULL )
        {
            inicio = fim = novo;
            novo -> prox = NULL;
        }
        else
        {
            aux = inicio;

            if(novo->idade>50 || novo->gravida[0] == 'S')
            {
                while(aux != NULL)
                {
                    if (aux->idade > 50 || aux->gravida[0] == 'S')
                    {
                        aux = aux-> prox;
                        break;
                    }
                    else
                    {
                        novo->prox = aux->prox;
                        aux->prox = novo;
                        break;
                    }
                    aux=aux->prox;
                }
            }
            else
            {
                while(aux == NULL)
                {
                    novo->prox = aux->prox;
                    aux->prox = novo;
                    break;
                }
            }
        }
    }
    else
    {
        printf("Crie a lista primeiro\n");
        getch();
    }

    clrscr();
}

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...