• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Sota

ajuda

24 mensagens neste tópico

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; }

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

como estao a usar scanf("%c",&v.);

keria avisar... para deixar 1 espaço entre " e o % : assim scanf(" %c",&v)

as x isto da erros marados...tv resulte :cheesygrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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á  :biggrin: ) :

#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;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

para ke isto ?

const char votes[] = "0abc";

e o k faz?

e pk usas os sizeof ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

#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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

existe pause tanto em windows como linux, mas concordo contigo, é mais correcto fazer-se um getchar do que system("pause");

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu disse outro OS nao disse LINUX, para algumas pessoas so existe windows e LINUX

mac, BSD, solaris nao existe entre outros...

$ uname

FreeBSD

$ pause

pause: Command not found.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pessoal uma questão porque que se mete um system ("pause "), e o warrier falou em fazer um getchar em vez system ("pause") atao mas uma coisa e outra nao tem finalidades diferentes

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pessoal uma questão porque que se mete um system ("pause "), e o warrier falou em fazer um getchar em vez system ("pause") atao mas uma coisa e outra nao tem finalidades diferentes

Sim, utilizar getchar(); ou system("PAUSE"); tem efeitos diferentes: getchar fica á espera que carregues numa tecla qualquer, enquanto que o system("PAUSE") é uma função da biblioteca <stdio.h> e imprime uma frase no ecrã. O system("PAUSE") só se usa nesses casos especiais (a própria função serve para o terminal esperar por uma tecla ser carregada) enquanto que o getchar usa-se em muitos casos ao longo da aplicação da linguagem.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora