Jump to content
moedas

Dúvida em programa

Recommended Posts

moedas

Boas tardes,

Preciso da vossa ajuda. Fiz o seguinte programa:

#include <stdio.h>

int main()
{
    /*variavel carta é dada pelo user*/
    int carta;

    /* introdução dos dados */
    printf("introduza carta (0 a 39) : "); 
scanf("%d", &carta);
/*dados recebidos - efectuar verificacao*/

/*corresponder numero de utilizador a numero de naipe*/
if(carta == 0 || carta == 10 || carta == 20 || carta == 30){ printf("2");}
if(carta == 1 || carta == 11 || carta == 21 || carta == 31){ printf("3");}
if(carta == 2 || carta == 12 || carta == 22 || carta == 32){ printf("4");}
if(carta == 3 || carta == 13 || carta == 23 || carta == 33){ printf("5");}
if(carta == 4 || carta == 14 || carta == 24 || carta == 34){ printf("6");}
if(carta == 5 || carta == 15 || carta == 25 || carta == 35){ printf("D");}
if(carta == 6 || carta == 16 || carta == 26 || carta == 36){ printf("V");}
if(carta == 7 || carta == 17 || carta == 27 || carta == 37){ printf("R");}
if(carta == 8 || carta == 18 || carta == 28 || carta == 38){ printf("7");}
if(carta == 9 || carta == 19 || carta == 29 || carta == 39){ printf("A");}
/*Ler naipe*/
if(carta >=0 && carta <= 9){
	char chr = 3;
	printf(" %c", chr);
}
if(carta >= 10 && carta <= 19){
	char chr = 4;
	printf(" %c", chr);
}
if(carta >= 20 && carta <= 29){
	char chr = 5;		
	printf(" %c", chr);
}
if(carta >= 30 && carta <= 39){
	char chr = 6;
	printf(" %c", chr);
}
}

Este programa assume um valor introduzido pelo utilizador e mostra a carta e naipe correspondente. O que eu preciso de fazer é o seguinte output:

http://img88.imageshack.us/img88/269/screenshot1gmc.jpg

Ou seja, o utilizador introduzir vários (neste caso, preciso de 6 valores) valores e o programa apresentar os valores acumulados, conforme imagem do seguinte output:

http://img833.imageshack.us/img833/5021/screenshot1ov.jpg

Agradeço toda a ajuda possível.  :(

Share this post


Link to post
Share on other sites
Flinger

O melhor é usares um array para ires guardando as cartas. Cada vez que imprimes, imprimes o array inteiro.

Quando vais imprimir uma posição, vez se a próxima posição é do mesmo naipe. Se fôr não imprimes o símbolo do naipe.

A ordenação do array, fica a teu critério. No exemplo, o utilizador insere as cartas ordenadas. se não forem ordenadas, podes optar por imprimir consoante a ordem de entrada, ou então, ao ler as cartas, inseres no array de forma ordenada.

Share this post


Link to post
Share on other sites
nunopicado

O que eu te sugeria, independentemente do uso do array ou não, é que optimizes o código de verificação da carta...

0, 10, 20, 30, ... todos têm em comum que, divididos por 10, dão resto 0...

1, 11, 21, 31, ... todos têm em comum que, divididos por 10, dão resto 1...

.

.

9, 19, 29, 39, ... todos têm em comum que, divididos por 10, dão resto 9...

Assim, em vez de todos esses ||, podes usar o operador % e testar apenas o resto da divisão inteira.

Além disso, podes substituir todos os if's por um switch case. Já há largos anos que não mexo em C, mas será algo deste género:

switch (carta % 10)
{
case 5: printf("D");
case 6: printf("V");
case 7: printf("R");
case 8: printf("7");
case 9: printf("A");

default: printf("%d",(carta % 10)+2); // entre as cartas terminadas em 0 e as terminadas em 4, o valor é sempre o resto (dividido por 10) da carta + 2
}

PS:

Quero aprender a programar. Será que consigo ?

Ninguém aqui nasceu ensinado... Se tiveres gosto e te empenhares, não tens porque não conseguir...


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

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

×
×
  • 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.