Jump to content
Sota

ajuda

Recommended Posts

Sota

Boas pessoal tou-me a iniciar em c e tive a fazer esse programa em que intruduzindo a sequencia de votos em que a conta como voto para candidadto a etc e 0 voto nulo e no final da sequencia termina com $. Eu csg compilar etc mas nao csg correr o programa da-me erro alguem me sabe explicar o que tou a fazer mal

comp. sota

#include<stdio.h>
#define final "$"
    char v;
int votosnulos; int votoa; int votob; int votoc;

int main()
{

printf(" intruduza uma sequencia de votos \n");
scanf("%c", v);
	while (v!=final){

	if (v==0)
		votosnulos=votosnulos+1;
		return votosnulos;
	if (v=='a')
   		votoa=votoa+1;
    	return votoa;
	if (v=='b')
		votob=votob+1;
		return votob;
	if (v=='c')
		votoc=votoc+1;
		return votoc;
	scanf("%c", v);

	}
return printf("%d,%d,%d,%d,", votosnulos, votoa, votob, votoc);
		return 0; }

Share this post


Link to post
Share on other sites
brink@ero

Assim por alto vejo que esqueceste de inicializar as variáveis a 0... colocaste return no if?  :bored:  :cheesygrin: não percebi o que querias fazer com isso.

Vê-lá se é isto que queres:

#include<stdio.h>
#include<windows.h>
#define final 's'
    char v;
     int votosnulos=0,votoa=0,  votob=0,  votoc=0;

int main()
{

printf(" intruduza uma sequencia de votos \n");
scanf("%c", &v);
	while (v!=final){

	if (v=='0')
		votosnulos=votosnulos+1;
	if (v=='a')
   		votoa=votoa+1;
	if (v=='b')
		votob=votob+1;
	if (v=='c')
		votoc=votoc+1;
	scanf("%c", &v);

	}
      printf("%d,%d,%d,%d,\n", votosnulos, votoa, votob, votoc);
  system("pause");
		return 0;
}

Share this post


Link to post
Share on other sites
Sota

como disse ainda tou aapreder c nao tenho mtas bases mas obrigado acabei de aprender umas coisinhas mas tenho so um problema ele não está a fazer o printf nao me mostra o resultados das somas

Share this post


Link to post
Share on other sites
Sota

so uma coisa para que serve o system o que ele faz. O meu compilador nao reconheçe windows.h onde posso sacar?

comp e obrigado pela ajuda;)

Share this post


Link to post
Share on other sites
brink@ero

É só para que no final apareça um mensagem "Prima qualquer tecla para continuar..."

Apaga essa instrução e o include windows.h, isso foi uns extras que eu fiz.

Share this post


Link to post
Share on other sites
Gurzi

quando tu dizes :

printf(" intruduza uma sequencia de votos \n");

scanf("%c", &v);

isto só vai aceitar um voto ...

definiste v como char mas só com 1 posição. é mesmo isso que queres?

tipo no primeiro printf aquela pergunta no programa todo só se vai realizar uma vez, por isso os whiles seguintes n tem logica

Share this post


Link to post
Share on other sites
brink@ero

quando tu dizes :

printf(" intruduza uma sequencia de votos \n");

scanf("%c", &v);

isto só vai aceitar um voto ...

definiste v como char mas só com 1 posição. é mesmo isso que queres?

tipo no primeiro printf aquela pergunta no programa todo só se vai realizar uma vez, por isso os whiles seguintes n tem logica

Está dito: "intruduza uma sequencia de votos", não "intruduza o seu voto"

E dentro do while tens o scanf("%c", &v);

Ele só quer contar os votos, não é necessário registar a sequencia de votos num char[N], ainda proxima porque se fosse assim, ele ou usava memória dinâmica ou tinha sempre um n.º limitado de votos possíveis de realizar.

Share this post


Link to post
Share on other sites
Gurzi

não percebi niente :X

então ele faz a pergunta introduza a sequência de votos mas só vai guardar o primeiro valor que introduzir :

imagina que o output é este:

Introduza uma sequencia de votos:

A

V --> 'A';

a variavel v vai ficar com o caracter 'A'

e depois entra no while e ele vai ver se o final é igual ao que está dentro do V

e vai sempre retornar o valor 1 , porque o v nunca vai ser igual ao &final mas ok :cheesygrin:

Share this post


Link to post
Share on other sites
brink@ero

não percebi niente :X

então ele faz a pergunta introduza a sequência de votos mas só vai guardar o primeiro valor que introduzir :

imagina que o output é este:

Introduza uma sequencia de votos:

A

V --> 'A';

a variavel v vai ficar com o caracter 'A'

e depois entra no while e ele vai ver se o final é igual ao que está dentro do V

e vai sempre retornar o valor 1 , porque o v nunca vai ser igual ao &final mas ok :cheesygrin:

Já executas-te o código? Eu já!

Volto a repetir: Existe dentro do while um scanf("%c", &v);

Por isso o programa vai estar sempre a escuta até que tecles a letra s!

Share this post


Link to post
Share on other sites
Sota

desculpaem so tive tempo de ler agora a finalidade do progrma é para que eu intruduzinho os seguiinte: "aabbaa00cc$ " em a letra a simboliza que 1 voto no candidato a b simbuliza um voto no candidado b e 0 voto nulo e no e que aprensente no fim o numero de votos  do cadidado a o numero de votos nulos(0) etc

o programa n me da erros so que nao me faz o printf no final ou seja nao me está aparecer o numero de votos em a etc

PS : ainda nao exprementei com windows.h porque ele diz que nao conheçe:S

obg e comp

Share this post


Link to post
Share on other sites
brink@ero

que forma de programar weird :X

Estas a falar comigo? É que o programa não é meu! Eu só corrigi o essencial!

Se fosse eu a fazer o programa era feito a minha maneira!

desculpaem so tive tempo de ler agora a finalidade do progrma é para que eu intruduzinho os seguiinte: "aabbaa00cc$ " em a letra a simboliza que 1 voto no candidato a b simbuliza um voto no candidado b e 0 voto nulo e no e que aprensente no fim o numero de votos  do cadidado a o numero de votos nulos(0) etc

o programa n me da erros so que nao me faz o printf no final ou seja nao me está aparecer o numero de votos em a etc

PS : ainda nao exprementei com windows.h porque ele diz que nao conheçe:S

obg e comp

Não fez porque eu substitui o '$' por 's'. LoL (está no define)

Share this post


Link to post
Share on other sites
Warrior

Como eu resolveria:

#include <stdio.h>
#define final '$'

int main() {
    char c;
    int v[26],i;
    for (i=0;i<=26;i++) v[i]=0;
    scanf("%c",&c);
    while (c!=final) {
          if (c=='0') v[0]++;
          else v[(int)(c)-96]++; 
          scanf("%c",&c);
    }
    printf("Nulos -> %d\n",v[0]);
    for (i=1;i<=26;i++) if (v[i]) printf("%c -> %d\n",(char)(i+96),v[i]);
    system("pause");
    return 0;
}
 

Podem existir 26 candidatos (de 'a' a 'z') não se ficando limitado aos ifs.

Se quiseres considerar o caso do 'A' ser igual ao 'a', limitas-te a fazer um c=tolower(c) logo após a leitura.

Share this post


Link to post
Share on other sites
motherFFH

Viva pessoal, sou novo por aqui e acho este forum à maneira.  :P

Gostei ali da solução do warrior, mas tem um pequeno bug, o array "v" deve set int v[27] em vez de 26.

A minha solução é esta (mas eu sou um bocado tarado, aviso já  :cheesygrin: ) :

#include <stdio.h>

const char votes[] = "0abc";
const char final = '$';
int v[sizeof(votes)/sizeof(*votes)-1];

int main() {
    char c;
    int i;
    while ((scanf("%c", &c), c) != final) {
  char *s=strchr(votes,c); 
  if (!s) continue;
  v[s-votes]++;
    }
    printf("Nulos -> %d\n",v[0]);
    for (i=1;i<sizeof(v)/sizeof(*v);i++) 
printf("%c -> %d\n",votes[i], v[i]); 
    return 0;
}

Share this post


Link to post
Share on other sites
motherFFH

Ok, em "votes" está uma lista de todos os caracteres de entrada aceites (excepto o $). Com base nisto, geramos em "v" um array com o mesmo número de elementos, excepto o \0, daí os sizeofs... Esse array vai ter o contador de cada letra.

No corpo do código é encontrar o char de input no tal array "votes", e incrementar o index correspondente em "v".

Francamente gosto bastante de C, e escrevi muitas linhas de código em C e tal. Mas já não tocando em C há uns bons anitos, quando olho para isto, dou razão aos que dizem que programar em C é dar tiros nos pés. Ou dito de outra forma, só para homens de barba rija :-)

Hoje em dia os meus vectores de desenvolvimento são (java OU .net) + python.

Share this post


Link to post
Share on other sites
entering

#include<windows.h>

se o objectivo é poderes usar o system então deves incluir o stdlib.h e não a windows.h

além do mais se é so para fazer um PAUSE

simplesmente faz um printf e um getchar

devido a compatibilidades

pois o system não faz nada mais que mandar PAUSE para a consola se usar outro OS não existe o comando 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

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