Jump to content
Gaahl

Estrutura de dados, C++/C

Recommended Posts

Boa noite. Preciso de ajuda neste algoritmo em c++ da matéria de estrutura de dados. Não sei por onde começar. Obrigado!

Fazer um programa que utiliza um vetor X de 10 posições e lê 20 valores inteiros situados no intervalo [1,99]. Utilize, ainda, duas variáveis, T1 e T2 inicializadas, respectivamente, com 0 e 11, de tal forma que, no vetor X, tenha-se duas pilhas de bases opostas. Para cada valor lido:

  • se for par e maior do que 50, inseri-lo na pilha 1;
  • se for par e menor ou igual a 50, então retirar o elemento do topo da pilha 1 e escrevê-lo;
  • se for ímpar e maior do que 50, inseri-lo na pilha 2;
  • se o valor lido for ímpar e menor ou igual a 50, então retirar o valor do topo da pilha 2 e escrevê-lo;
  • se ocorrer uma situação de UNDERFLOW, escreva uma mensagem e ignore o valor lido passando a ler o novo valor;
  • se ocorrer OVERFLOW ou se já tiverem sido lidos 20 valores, então escrever o conteúdo das duas pilhas e terminar o programa;

Share this post


Link to post
Share on other sites

@Gaahl, atente-se ao título do tópico quando for criar um. Evite palavras como "URGENTE".

 

Sobre a sua dúvida, poste algo que você já fez para ver se alguém pode ajudar.

Share this post


Link to post
Share on other sites

Obrigado Giovani. Eu simplesmente fiz os testes. Eu já não consegui entendo no começo do exercício. Um vetor de 10 posições, mas que lê 20 números. Depois duas pilhas de bases opostas. Essas coisas eu não entendi.

Share this post


Link to post
Share on other sites

T1 e T2 indicarão o topo da pilha, provavelmente. Se são de base oposta, T1 = 0 e T2 = N.

você vai usar um único vetor p/ implementar duas pilhas e vai ter que controlar o tamanho delas (p/ não ter sobreposição) com T1 e T2.

Share this post


Link to post
Share on other sites

É desnecessário inicializar T2 com 11 pois como os vetores na linguagem C iniciam com seu índice em 0 e terminam em o tamanho do vetor -1 então a última posição do vetor x será 9. Por causa disso no meu programa inicializo T2 com 9 para que ela guarde o índice da base oposta da pilha. Se quiser respeitar o enunciado é só modificar o valor de inicialização dela para 11 e alterar durante o código. Aí vai:

int main(){
  int valor,X[10],T1=0,T2=9,i;
  for(i=0;(i<20)&&(T1<10)&&(T2>-1)&&(T1<=T2);i++){
    printf("digite um valor:");
    scanf("%d",&valor);
    if((valor>=1)&&(valor<=99))
      if(!(valor%2)){ //se e par
        if(valor>50){ //se e maior do que 50
          X[T1]=valor;
          T1++;
        }
        else{ //se e menor ou igual a 50
          if(T1>0){
            printf("Valor retirado do topo da pilha 1: %d",X[T1-1]);
            T1--;          
          }
          else{
            printf("UNDERFLOW. Nao ha valor na pilha.");
          }
        }       
      }
      else{ //se e impar
        if(valor>50){ //se e maior do que 50
          X[T2]=valor;
          T2--;
        }
        else{ //se e menor ou igual a 50
          if(T2<9){
            printf("Valor retirado do topo da pilha 2: %d",X[T2+1]);
            T2++;          
          }
          else{
            printf("UNDERFLOW. Nao ha valor na pilha.");
          }
        }
      }      
    else
      printf("valor fora do intervalo permitido que e de 1 a 99.");    
  }
  printf("Pilha1:\n");
  for(i=0;i<T1;i++)
    printf("%d\n",X[i]);
  printf("Pilha2:\n");
  for(i=9;i>T2;i--)
    printf("%d\n",X[i]);      
  system("pause");
}

 

Share this post


Link to post
Share on other sites

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

  • Similar Content

    • By Roberto_almeida
      Boa tarde, 
       
      Estou trabalhando em um projeto que será nescessario implantar um termo de aceite via poup-up na area do cliente no site, alguem consegue me orientar qual tecnologia eu posso usar para coletar esse aceite que o cliente fara atráves desse poup-up?
       
      Desde já agradeço a todos.
    • By fideles
      Fala pessoal, como anda as coisas?
       
      Meu conhecimento em JS e quase neutro, conheço algo, mais talvez não o suficiente para o que eu precise, por isso venho pedir ajuda a vocês,
       
      Tenho um pequeno programinha, simples mesmo que tem 4 areas (Administração, Compras, Financeiro, Almoxarifado).
       
      Quem fica na ADM solicita algo,  compras visualiza e da um "ok" e o financeiro tbm tem que dar um "ok" e no final, o almoxarifado dá um "Processo Concluido" (está parte está ok, funcionando, sem erro)
       
      Meu problema seria que quem está no almoxarifado consegue clicar no botão "Processo Concluido" mesmo o pessoal de compras e financeiro não dando um "ok" na solicitação ou ele tbm consegue dar "Processo Concluido" se um ou outro dar um "ok". Precisaria que ele so conseguisse dar "Processo Concluido" se os dois darem o "ok", se so um dar "ok" ele não pode dar "Processo Concluido".
       
      Alguém consegue pelo menos me dar um norte para que eu possa dar continuidade? Já tentei em PHP e nada.
       
    • By IgorExtreme
      Olá estou com problema nesta questão: "Escreva um programa que leia e armazene em um vetor os dados de 30 pessoas. Estes dados são o nome da pessoa, sua idade, e os nomes completos do pai e da mãe. A seguir, o programa deve identificar (e mostrar os índices) das pessoas que estão relacionadas por um parentesco avô-neto e irmão-irmão. No caso dos irmãos, deve ser informado ainda qual é o mais novo dos dois." O código é esse
      #include<stdio.h> #include<string.h> #define NUM 4 struct pessoa { char nome[20]; char mae[20]; char pai[20]; int idade; }; main() { struct pessoa vetorPessoas[NUM]; int i; printf("Digite os dados de %d pessoas:\n", NUM); for (i = 0; i < NUM; i++) { printf("Digite o nome da pessoa %d: ", i); fflush(stdin); gets(vetorPessoas[i].nome); printf("%s\n", vetorPessoas[i].nome); printf("Digite o nome da mae da pessoa %d: ", i); fflush(stdin); gets(vetorPessoas[i].mae); printf("%s\n", vetorPessoas[i].mae); printf("Digite o nome do pai da pessoa %d: ", i); fflush(stdin); gets(vetorPessoas[i].pai); printf("%s\n", vetorPessoas[i].pai); printf("Digite a idade da pessoa %d: ", i); fflush(stdin); scanf("%d", &vetorPessoas[i].idade); printf("%d\n", vetorPessoas[i].idade); if(!strcmp(vetorPessoas[0].pai, vetorPessoas[1].nome)){ printf("%s e avo de %s\n", vetorPessoas[1].pai, vetorPessoas[0].nome); } if(!strcmp(vetorPessoas[2].pai, vetorPessoas[3].nome)){ printf("%s e avo de %s\n", vetorPessoas[3].pai, vetorPessoas[2].nome); } } /*if(!strcmp(vetorPessoas[i].pai, vetorPessoas[i].nome)){ printf("%s e pai de %s\n", vetorPessoas[i].pai, vetorPessoas[i].pai); }*/ if(!strcmp(vetorPessoas[0].pai, vetorPessoas[1].pai)){ printf("Eles sao irmaos\n"); if(vetorPessoas[0].idade > vetorPessoas[1].idade){ printf("%s mais velho\n", vetorPessoas[0].idade); } else{ printf("%s e mais novo\n", vetorPessoas[1].idade); } } if(!strcmp(vetorPessoas[2].pai, vetorPessoas[3].pai)){ printf("Eles sao irmaos\n"); if(vetorPessoas[2].idade > vetorPessoas[3].idade){ printf("%s mais velho\n", vetorPessoas[2].idade); } else{ printf("%s e mais novo\n", vetorPessoas[3].idade); } } } O problema é que ele mostra quase tudo menos a parte se tal irmão é mais velho que o outro
    • By ricardo Oliv3ira
      Um cano cilíndrico de raio R1 vai ser usado para guardar outros dois canos de raio R2 e R3. Caso os dois últimos canos caibam dentro do primeiro, seu programa deve imprimir “Coube”. Caso contrário imprima “Não coube”.
      #include <stdio.h> int main(void) { float R1,R2,R3; printf("digite o 1º tamanho:"); scanf("%f",R1); printf("digite o 2º tamanho"); scanf("%f",R2); printf("digite o 3º tamanho"); scanf("%f",R3); if(R2,R3<R1){ printf("Coube"); } else(R2,R3>R1){ printf("Não Coube"); } return 0; }  
    • By Hodol
      Boa tarde, estou começando a programar e ainda não sei qual linguagem de programação eu devo iniciar. Me de uma luz, Obrigado!
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.