Ir ao conteúdo
  • Cadastre-se

C Somar duas pilhas em C


Posts recomendados

Eu fiz esse código, mas não consigo somar as duas pilhas, somar linha por linha, depois somar o total de uma com o total da outra.

O código:

 

#include <stdlib.h>
#include <stdio.h>
#include <locale.h>
#define tam 4


struct registro{
	int topo;
	int item[tam];
};

	struct registro p1;
	struct registro p2;
	int valor = 0;
	float soma;


void menu(){
	printf("\n\n--------------------------------------------------\n");
	printf("1. ADC PILHA1  2. ADC PILHA2  3. CONTAR  4. SAIR\n");
	printf("\n\nOPÇÃO: ");
}

void main(){
    setlocale(LC_ALL,"portuguese");
	int op = 0;

	do{

		printPilhas();
		menu();
		scanf("%d", &op);
		switch(op){
			case 1:{
				printf("VALOR: ");
				push();
				system("cls");
				break;
			}
			case 2:{
				printf("VALOR: ");
				push2();
				system("cls");
				break;
			}

			case 3:{
				system("cls");
				printf("\nCount Pilha1: %d", countQtde(1));
				printf("\nCount Pilha2: %d", countQtde(2));
				break;
			}
			case 4:
			{
                exit(0);
                break;
			}

		}
	}while(op!=3);
}

void push(){
	scanf("%d", &valor);
	p1.item[p1.topo] = valor;
	p1.topo++;
}

void push2(){
	scanf("%d", &valor);
	p2.item[p2.topo] = valor;
	p2.topo++;
}

void printPilhas(){
	int i, temp1=0, temp2=0;
	for(i=tam; i>=0; i--){
		temp1 = 0;
		temp2 = 0;
		if(p1.topo > i)
			temp1 = p1.item[i];
		if(p2.topo > i)
			temp2 = p2.item[i];

		printf("\n%4d - %4d\t%4d", i,temp1,temp2);
	}
}

int countQtde(int i){
	switch(i){
		case 1:{return p1.topo; break;}
		case 2:{return p2.topo; break;}
			}
}

 

Link para o comentário
Compartilhar em outros sites

Olá!

 

sugiro não usar NUNCA variáveis globais.

Mantenha um contador de tamanho DENTRO de cada pilha. 

Evite usar void().
 

12 minutos atrás, Felipe S Cordeiro disse:

void printPilhas()

 

Em especial evite isso. Em geral é um erro. Se não tem argumentos e não retorna nada é um buraco negro.

  • de nada serve ou
  • depende totalmente de variáveis globais e vai dar erro toda hora.
  • teste SEMPRE o retorno de scanf(). O que vai por na pilha se não leu nada?
     

Considere escrever em torno dos dados. É muito mais simples.

  • empilhar empilha em uma pilha
  • desempilhar tira o valor de uma pilha e retorna
  • somar duas pilhas retorna o que? Uma pilha...

 

Link para o comentário
Compartilhar em outros sites

Não precisa de menu nem de loops nem nada enquanto a logica não está ok. Isso não acrescenta nada. Use constantes.

 

main() é
 

    int main(int argc, char** argv)

 

sempre... Não depende de nós. Se não vai usar os argumentos pode declarar 
 

    int main(void);


mas main() retorna um int para o shell. Sempre. E o compilador deve sempre reclamar se declarar algo diferente.

 

Pilha:

 

Uma pilha é algo assim, sempre: 

 

typedef struct
{
    Elemento*    top;
    unsigned     capacidade;
    unsigned     tamanho;

}   Pilha;

 

talvez deva declarar apenas isso, o simples. No seu caso cada elemento é um simples int então pode escrever
 

typedef int Elemento;

typedef struct
{
    Elemento*    top;
    unsigned     capacidade;
    unsigned     tamanho;

}   Pilha;

 

E o resto vem por consequência. A pilha é uma coleção de Elemento, tem uma certa capacidade e um certo tamanho a cada momento. E o resto vem por consequência
 

int         vazia (Pilha*);
int         pop   (Pilha*);
int         push  (Elemento*,Pilha*);
int         size  (Pilha*);
Elemento*   top   (Pilha*); 

 

Somar duas pilhas claro deve ser algo assim

 

    Pilha*    soma_pilhas( Pilha* uma, Pilha* outra );

 

Escreva em torno dos dados e tudo fica mais fácil. E não use menus e interatividade num programa que não está pronto. Só vai perder tempo.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!