Programação e Desenvolvimento

Projetos, softwares, sites, blogs e trabalhos conforme sua necessidade e com os melhores preços.
Tecnologia do Blogger.

Text Widget

Search (Don't Edit)

Sample Text

Formulir Kontak

Nome

E-mail *

Mensagem *

Full-Width Version (true/false)

Flickr

Facebook

Translate

Video of the Day

Slider (Add Label Name Here!) (Documentation Required)

Teste Teste Teste

Know us

Teste Teste Teste Teste

Popular Posts

Featured

21 de set de 2017

Algoritmo em C utilizando Pilha e Fila

Algoritmo em C simulando um porto onde existam 10 pilhas com capacidade de 10 containers por pilha. O porto recebe navios cargueiros em fila e eles descarregam ou carregam os containers.



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

#define T 10
#define P 10



typedef struct{
        int topo;
}PILHA;


typedef struct {
       int cod, qtd;
}NAVIO;
typedef struct{
        int n, ini;
        NAVIO navio[T];
}FILA;

typedef struct{
        int n, ini;
        NAVIO navio[T];
}FILASaida;

int menuPrincipal();//função com as opções do menu prinicipal...
void iniciarPilha(PILHA *p);
int overflow(PILHA *p);
int underflow(PILHA *p);
void push(PILHA *p, FILA *f );
void pop(PILHA *p);
void imprimirPilha(PILHA *p);


void iniciarFila(FILA *f);
int vazia(FILA *f);
int cheia(FILA *f);
void inserir(FILA *f,NAVIO *nav);
void imprimirFila(FILA *f);
void imprimirFilaTotal(FILA *f);
void remover(FILA *f);

int main(){

    PILHA pilha[T];

    FILA fila;
    FILASaida filaS;
    NAVIO nav;

    int menu, x, codNavio = 0, pilhaCont, codNavioS = 0, qtd, qtdSoma, aux = 0;

    for(x = 0; x < 10; x++){
        iniciarPilha(&pilha[x]);
    }

    iniciarFila(&fila);
    iniciarFila(&filaS);

    do{

        menu = menuPrincipal();

        switch(menu){
            case 1:
                if(!cheia(&fila)){
                    codNavio++;
                    nav.cod = codNavio;
                    printf("Informe a quantidade de containers, que tem no Navio: ");
                    scanf("%d", &nav.qtd);

                    inserir(&fila, &nav);
                    
                    printf("\n\nNavio inserido com sucesso:\n\n");

                }
                else{
                    printf("A fila de navio esta cheia: \n");
                }
            break;
            case 2:
                if(!vazia(&fila)){
                    system("cls");
                    
                    do{
                    imprimirFila(&fila);
                    printf("Informe a pilha que vai desgarregar 1 - 10: \n");
                    scanf("%d", &pilhaCont);
                   
                    if(pilhaCont < 1 || pilhaCont > 10 ){
                    printf("\nOpcao invalida\n");
                   
}
if(!overflow(&pilha[pilhaCont-1])){
 push(&pilha[pilhaCont-1], &fila );
 printf("\nColocado na pilha\n");
}
else{
printf("\nEssa Pilha esta cheia\n");
}
                   
}while(pilhaCont < 1 || pilhaCont > 10 );
                }
                else{
                    printf("Não existe nenhum navio na fila\n");
                }
            break;
            case 3:
            if(!vazia(&fila)){
                    system("cls");
                   
                    imprimirFilaTotal(&fila);
                   
                }
                else{
                    printf("Não existe nenhum navio na fila\n");
                }
            break;
            case 4:
            
            for(x = 0; x < 10; x++){
            printf("Pilha %d - qtd %d\n", x+1, pilha[x].topo+1);
}
printf("\n\n");
            break;
            case 5:
               qtd = 0;
               qtdSoma = 0;
                    codNavio++;
                    nav.cod = codNavio;
                    nav.qtd = 0;
                    aux = 0;
           
           
            do{
                    for(x = 0; x < 10; x++){
            printf("Pilha %d - qtd %d\n", x+1, pilha[x].topo+1);
            }
            printf("Informe a pilha: ");
                    scanf("%d", &pilhaCont);                    
                    printf("A quantidade de containers, que vai carregar no Navio: \n");
                    scanf("%d", &qtd);
                   
                    if(pilhaCont < 1 || pilhaCont > 10 ){
                    printf("\nOpcao invalida\n");                    
}
if(!underflow(&pilha[pilhaCont-1])){
if(qtd > 10 || qtd < 0){
printf("\nValor invalido\n");
}
else{
if(pilha[pilhaCont-1].topo <= qtd ){
nav.qtd += pilha[pilhaCont-1].topo + 1;
pilha[pilhaCont-1].topo = -1;
printf("\nteste: %d\n", pilha[pilhaCont-1].topo);
}
else{
nav.qtd += qtd;
pilha[pilhaCont-1].topo -= qtd;
}
}
aux = 1;
}
else{
printf("\nEssa Pilha esta vazia\n");
}
printf("\nDeseja continuar: 1-sim/2-nao\n");
scanf("%d", &qtd);
if(qtd == 1){
pilhaCont = 2;
}
else{
pilhaCont = -2;
}
                   
}while(pilhaCont < 1 || pilhaCont > 10 );
if(aux == 1){
inserir(&filaS, &nav);
}
       

                
            break;
            case 6:
            if(!vazia(&filaS)){
                    system("cls");
                   
                    imprimirFilaTotal(&filaS);
                   
                }
                else{
                    printf("Não existe nenhum navio na fila\n");
                }
            break;

        }

    }while(menu != 0);

    return 0;
}

int menuPrincipal(){

    int opc;

    printf("1-Colocar Navio na Fila\n"
           "2-Desgarregar containers\n"
           "3-Imprimir Fila de navios para descarregar\n"
           "4-Imprimir as pilhas\n"
           "5-Carregar Navios: \n"
           "6-imprimir fila de Navios carregados: \n"
           "0-sair\n\nopcao:");
    scanf("%d", &opc);
    system("cls");

    if(opc >= 0 && opc <= 10){
        return opc;
    }
    else{
        return menuPrincipal();
    }
}

void iniciarPilha(PILHA *p){
     p->topo = -1;
}


void iniciarFila(FILA *f){
     f->n =0;
     f->ini = 0;
}
int overflow(PILHA *p){
    return p->topo == T-1;
}
int underflow(PILHA *p){
    return p->topo == -1;
}

int vazia(FILA *f){
    return f-> n == 0;
}
int cheia(FILA *f){
    return f-> n == P;
}

void inserir(FILA *f,NAVIO *nav){
     int fim;
     fim = (f-> ini + f-> n) % P;
     f->navio[fim] = *nav;
     f->n++;

}

void imprimirFila(FILA *f){
    int aux, fim, x = 0;
     fim = (f->ini + f-> n-1)% T;

     if(f->ini == 0 || f-> ini <= fim || fim == T -1){
       for(aux = f-> ini; aux<= fim; aux++){
         if(x == 0){
          printf("Posicao na fila: [%d] - Codigo: %d - qtd: %d\n",aux+1,f->navio[aux].cod, f->navio[aux].qtd);
          x = 1;
}
           
           }
       }
     else{
          for(aux = f->ini; aux < T; aux ++)
             printf("Posicao na fila: [%d] - Codigo: %d\n",aux+1,f->navio[aux].cod);

          for(aux = 0; aux <=fim; aux++)
             printf("Posicao na fila: [%d] - Codigo: %d\n",aux+1,f->navio[aux].cod);
     }
     printf("\n\n");
}
void imprimirFilaTotal(FILA *f){
    int aux, fim, x = 0;
     fim = (f->ini + f-> n-1)% T;

     if(f->ini == 0 || f-> ini <= fim || fim == T -1){
       for(aux = f-> ini; aux<= fim; aux++){
         
          printf("Posicao na fila: [%d] - Codigo: %d - qtd: %d\n",aux+1,f->navio[aux].cod, f->navio[aux].qtd);
         
           
           }
       }
     else{
          for(aux = f->ini; aux < T; aux ++)
             printf("Posicao na fila: [%d] - Codigo: %d\n",aux+1,f->navio[aux].cod);

          for(aux = 0; aux <=fim; aux++)
             printf("Posicao na fila: [%d] - Codigo: %d\n",aux+1,f->navio[aux].cod);
     }
     printf("\n\n");
}
void remover(FILA *f){
f->ini  =(f->ini +1) % T;
     f->n--;
}


void push(PILHA *p, FILA *f ){
int aux, fim, x = 0, y = 0;
     fim = (f->ini + f-> n-1)% T;

     if(f->ini == 0 || f-> ini <= fim || fim == T -1){
       for(aux = f-> ini; aux<= fim; aux++){
         if(x == 0){
          printf("Posicao na fila: [%d] - Codigo: %d - qtd: %d\n",aux+1,f->navio[aux].cod, f->navio[aux].qtd);
          x = 1;
          for(y = 0; y < 10; y++ ){
         

          p->topo++;
f->navio[aux].qtd--;
          if(f->navio[aux].qtd == 0){
          remover(f);
          break;
   }
   if(p->topo == 9){
    break;
}
}
}
           
           }
       }
     else{
          for(aux = f->ini; aux < T; aux ++)
             printf("Posicao na fila: [%d] - Codigo: %d\n",aux+1,f->navio[aux].cod);

          for(aux = 0; aux <=fim; aux++)
             printf("Posicao na fila: [%d] - Codigo: %d\n",aux+1,f->navio[aux].cod);
     }
     printf("\n\n");
}

Proxima  → Inicio

Postagem em destaque

MVF5 System - SOLUÇÕES EM TI!

          Desenvolvimento de projetos, softwares, sites, blogs e trabalhos conforme sua necessidade e com os melhores preços. Entre em c...

Seguidores

Total de visualizações

Postagens populares