Ir ao conteúdo
  • Cadastre-se

vangodp

Membro Pleno
  • Posts

    1.752
  • Cadastrado em

  • Última visita

Tudo que vangodp postou

  1. Hola. Vou te responder aqui. Sei que você me pediu ajuda por mp, porém vamos pensar que isso pode ajudar a mais pessoas, e por isso respondo aqui . Esse é o código que você me passou: #include <stdio.h>#define M 5#define N 100int cont ( char matriz[M][N] ) { int i, j, cont = 0; for ( i = 0; i < M; i++ ) { for ( j = 0; j < N; j++ ) { if ( matriz[i][j] == ' ' ) cont++; } } return cont;}int main() { char m[M][N]; int i, j; for ( i = 0; i < M; i++ ) gets ( m[i] ); printf ( "\nForam encontrados %d espa\207os em branco na matriz.", cont ( m ) ); return 0;} O problema é que você reserva uma matriz de M*N casinhas, porém não a deu um valor inicial. Essa "porção" de memória poderia conter já resíduos (chars) que contenham a ' '(espaços), que é exatamente o que você esta buscando, porém esses espaços seriam deixados por outros programas, que possivelmente tenham usado essa parte da memória. Isso se resolve fazendo char m[M][N] = {0}; /*Só na hora da declaração, depois terá que ser feita uma a uma todas as casinhas*/.Porém essa não é uma solução 100% fiável como única medida. Por quê? Porque si você usar 2 ou mais vezes seria você mesma que estaria deixando lixo nessa porcão de memória. Lógico né?. =) Então devemos dar valor inicial?? Sim, sempre! É uma das boas praticas como programador que você pode adotar, sempre é melhor você saber o que tem nas suas variáveis, do que ter valores imprevisíveis que possam fazer seu programa falhar. Pense nisso Agora passamos a ver soluções. Tal como falei, si você der um valor inicial e usar seu programa uma só vez, então não vai ter problema, o problema você teria si usa-se essa matriz varias vezes, ainda assim que tivesse dado um valor inicial, seria você mesma quem sujaria essa memória, a menos que a limpa-se ela cada vez logo depois de usar... funciona, porém não é a melhor alternativa. Passamos então a falar dessa "melhor alternativa". Si você for lá na sua função cont, na parte do loop interno "interno", você esta processando o string em toda sua totalidade, toda a linha que você reservou, isso inclui contar todo o lixo que contem na sua string. E si invés de contar toda a linha eu só conto o o que escrevi? Pode se fazer? A resposta é sim. E para colmo já existe algumas funções que fazem um processo parecido, printf por exemplo. Nunca se deu conta que por mais longo que seja um string, o printf sempre imprime nosso string de uma forma aparentemente "inteligente"? Comento... Ele não imprime todo o string, somente o que escrevemos. Um exemplo... Si eu crio char frase[100000000] = "Alo Mundo", ele não sai essas 10000000.... casinhas não é? O mais seguro é que você nunca tenha percebido isso. Quando uma coisa funciona bem dificilmente nos chama a atenção rs. A questão esta em imitar esse comportamento do printf. Como????!?!!?!?!? XDDD Veja abaixo a explicação. Quando eu crio... char teste [100] = "Alo mundo"; A linha contem um caractere "oculto"(Desconheço seu nível de programadora ), que é o que marca até onde escrevemos, por mais longa que seja essa string ele esta pegado ao final do que escrevemos. No fundo "Alo mundo" esta na memória como { 'A','l','o',' ','m','u','n','d','o','\0' ..... -> continua até 100 e esta cheio de lixo XD }. Cada letra vai ao lado uma da outra nessa ordem, mas a letra mais importante é a '\0', isso é o caractere nulo que o programa bota ele aí por nós de forma implícita. Então a resposta ao nosso problema é que devemos ler até chegar nele!!! Não devemos contar espaços que estão fora desse pedaço que escrevemos, isso é exatamente o que faz printf, imprimir até o nulo. É a melhor solução sem duvida, já que ela deixa de fora o lixo, você não acha? Então vamos lá? Aplicando essa teoria no seu código. #include <stdio.h>#define LINHAS 5#define LETRAS 100int cont ( char matriz[LINHAS][LETRAS] ) { int i, j, cont = 0; for ( i = 0; i < LINHAS; i++ ) { for ( j = 0; matriz[i][j] != '\0' ; j++ ) { // modificamos aqui para que "rode" por enquanto que a matriz[i][j] não tenha armazenado o char NULL ('\0'), que indica o fim do nosso treixo, ou seja cada linha tem '\0' no final. if ( matriz[i][j] == ' ' ) cont++; } } return cont;}int main() { char m[LINHAS][LETRAS]; //5 LINHAS de 100 LETRAS cada int i, j; for ( i = 0; i < LINHAS; i++ ) scanf( "%99[^\n]%*c", &m[i][0] ); // similar a gets porém evita a entrada do char enter na memoria ou seja, mais lixo XD printf ( "\nForam encontrados %d espa\207os em branco na matriz.m", cont ( m ) ); return 0;} A mudança mais significativa está em que mudamos o loop for interno da sua função para que só funcione ater que encontre o caractere '\0'. Isso exclui todo o lixo, e partes que não nos interessam. É a melhor forma, já que assim você pode usar despreocupadamente a função cont quantas vezes você quiser já que ela nunca vai "processar o lixo" conjuntamente com as partes que te interessam. E com isso foi tudo, já não tem mais, a não ser algo sobre a função gtes, mas não entra, acho, nesse tema, si quiser saber mais sobre isso abre um tema exclusivo e posso lhe explicar, ou me adicione no skype. Sorte!
  2. Impossível saber... não sabemos como você tem os tais arquivos txt. você nem adicionou as comprovações para saber si os arquivos abriram ou não... em fim, todo um exemplo de como não se deve programar.
  3. Também é verdade O_O não vi isso.
  4. troque scanf("%d", n1); por scanf("%d", &n1);
  5. vangodp

    Help ant hacker em C ?

    não entendi nada também? anti hacker? WTF!
  6. Vamos ver.... vou te explicar de forma rápida. Tudo depende do Unix Timestamp. Basicamente é um ponto no tempo que iniciou um tal marcador no dia 1 de janeiro de 1970 a meia noite, é uma espécie de cronometro que conta em segundos desde essa data que eu falei, ou seja quando eu quero obter um tempo eu obtenho o tempo passado em segundos desde o dia 1 de janeiro de 1970 a meia noite, isso me vai devolver um numero muito grande de segundos que aplicado um algoritmo de conversão se transforma no que você quiser, dias, minutos, horas, anos, etc.... Nós precisamos de uma variável especial, essa variável especial é time_t, ela é um tipo de inteiro super grande sem negativos, algo como unsigned long long, time_t é um define de algo como isso, não é o importante, o importante é saber que time_t é como int. Então criamos algo como time_t tempo;, ela guardará o tempo em segundos passado desde Unix timestamp. Logo precisamos aplicar esses algoritmos mais ou menos complexos para transformar o time_t tempo em uma data que possa ser impressa, pois não nos vai servir de muito um numero super grande. Podemos buscar el algoritmo de como fazer isso manualmente por internet, ou aproveitar alguma função que nos faça o trabalho por nós. Agora voltamos a nosso exemplo e o veremos em que consiste cada passo. #include <time.h> /* precisa incluir isso para poder usar as seguintes coisas: time_t, struct tm, time, localtime */int main (){time_t rawtime; // Variável que vai guardar os segundos passados desde o Unix timestamp.struct tm * timeinfo; //Uma estrutura que vai conter o time_t já dividido em segundos, horas, minutos, dias etc...time (&rawtime); // aqui é quando pedimos ao computador o tempo passado desde Unix timestamp, e se vai guardar em rawtime, de isso se encarga a funçao time()... De pedir a hora para o computador, ela nos devolve o tempo em segundos como falei antes. timeinfo = localtime (&rawtime); //A função localtime faz os cálculos complexos para transformar o valor de rawtime que esta em em segundos para algo que nos interessa saber, algo como dias, mês, hora etc, isso tudo fica armazenado na estrutura timeinfo.//Agora que temos a hora completamente guardada na estrutura timeinfo, usamos a função asctime que lê os dados da estrutura timeinfo e a converte e um string no qual printf se encarga de mostrar.printf ("Current local time and date: %s", asctime(timeinfo)); Agora você já é todo um experto em datas. Para melhorar vamos ver como sacar proveito disso de forma otimizada. Como falei a estrutura timeinfo que é do tipo tm, contem tudo pronto para nós depois de passar pelo processo anterior, para você ter uma ideia do que contem, si eu quero obter minutos de ela eu faço timeinfo->tm_min isso imprime a hora atual. você pode fazer coisas como printf ( "%d", timeinfo->tm_min ); e o que vai imprimir é que minutos você tem no relojo do seu sistema é só olhar la embaixo na bandeja. /* localtime example */#include <stdio.h> /* puts, printf */#include <time.h> /* precisa incluir isso para poder usar as seguintes coisas: time_t, struct tm, time, localtime */int main (){ time_t rawtime; // Variável que vai guardar os segundos passados desde o Unix timestamp. struct tm * timeinfo; //Uma estrutura que vai conter o time_t já dividido em segundos, horas, minutos, dias etc... time (&rawtime); // aqui é quando pedimos ao computador o tempo passado desde Unix timestamp, e se vai guardar em rawtime, de isso se encarga a funçao time()... De pedir a hora para o computador, ela nos devolve o tempo em segundos como falei antes. timeinfo = localtime (&rawtime); //A função localtime faz os cálculos complexos para transformar o valor de rawtime que esta em em segundos para algo que nos interesa saber, algo como dias, mes, hora etc, isso tudo fica armazenado na estrutura timeinfo. printf ( "Minutos->%d", timeinfo->tm_min ); //imprimimos os minutos que você tem no seu computador return 0;} Vai dar como resultado... Então sabendo isso que coisas posso tirar dessa estrutura?? Eu deixei a direção para você antes, volto a por aqui: http://www.cplusplus.com/reference/ctime/tm/ Si você entrar ai vai ver uma tabela com coisas como tm_sec int seconds after the minute 0-61* tm_sec sao segundos, você pode fazer timeinfo->tm_sec e você vai obter os segundos do seu sistema. observe que põe de 0 a 61* esse * é uma nota que você pode ler ao pé da pagina, nela bota "* tm_sec is generally 0-59. The extra range is to accommodate for leap seconds in certain systems." isso é por causa de anos bissextos. normalmente vai de 0 a 59, porém si imprimir um 61 em segundos isso acontece por ser um ano bissexto. então a tabela completa é: tm_sec int seconds after the minute 0-61* tm_min int minutes after the hour 0-59 tm_hour int hours since midnight 0-23 tm_mday int day of the month 1-31 tm_mon int months since January 0-11 tm_year int years since 1900 tm_wday int days since Sunday 0-6 tm_yday int days since January 1 0-365 tm_isdst int Daylight Saving Time flag tudo isso se aplica a uma estrutura tm, no nosso caso a chamamos de timeinfo, si eu quero horas timeinfo->tm_hour, si quero o dia atual timeinfo->tm_mday, si quero saber em que mês estamos, timeinfo->tm_mon (imprimirá os meses que passaram desde janeiro do ano no que estamos)..... Fácil não? Agora como resolver seu problema??? vamos lá... /* localtime example */#include <stdio.h> /* puts, printf */#include <time.h> /* precisa incluir isso para poder usar as seguintes coisas: time_t, struct tm, time, localtime */int main (){ time_t rawtime; // Variável que vai guardar os segundos passados desde o Unix timestamp. struct tm * timeinfo; //Uma estrutura que vai conter o time_t já dividido em segundos, horas, minutos, dias etc... time (&rawtime); // aqui é quando pedimos ao computador o tempo passado desde Unix timestamp, e se vai guardar em rawtime, de isso se encarga a funçao time()... De pedir a hora para o computador, ela nos devolve o tempo em segundos como falei antes. timeinfo = localtime (&rawtime); //A função localtime faz os cálculos complexos para transformar o valor de rawtime que esta em em segundos para algo que nos interesa saber, algo como dias, mes, hora etc, isso tudo fica armazenado na estrutura timeinfo. printf ( "%d/%d%/%d", timeinfo->tm_mday, timeinfo->tm_mon+1, 1900 + timeinfo->tm_year ); //imprimimos os minutos que você tem no seu computador return 0;} Outra alternativa muito interessante é a função strftime http://www.cplusplus.com/reference/ctime/strftime/ que proporciona uns especificadores de formato muito personalizados. Em fim... É questão de praticar e muito.
  7. Para isso diponemos de time.h. um exemplo é: /* localtime example */#include <stdio.h> /* puts, printf */#include <time.h> /* time_t, struct tm, time, localtime */int main (){ time_t rawtime; struct tm * timeinfo; time (&rawtime); timeinfo = localtime (&rawtime); printf ("Current local time and date: %s", asctime(timeinfo)); return 0;} Como bem podemos ver, temos uma estrutura tipo tm que se chama timeinfo, é um ponteiro. Si nós usamos o operador -> para ver o que tem dentro de timeinfo-> encontraremos dentro "tudo" ja prontinho pra nós... Hora, minuto, segundos, mes, ano...... Aprenda a usar time.h e isso já não será um problema. info sobre a estrutura tm. http://www.cplusplus.com/reference/ctime/tm/
  8. #include <conio.h>#include <math.h>#include <string.h>main() { int lin, col, tab; int soma; int mat[2][2]; for ( lin = 0; lin <= 1; lin++ ) { for ( col = 0; col <= 1; col++ ) { printf ( "Digite ELEMENTO da linha %d, coluna %d da matriz: ", lin + 1, col + 1 ); scanf ( "%d", &mat[lin][col] ); } } //Imprimindo a matriz printf ( "Matriz\n" ); for ( lin = 0; lin < 2; lin++ ) { for ( col = 0; col < 2; col++ ) printf ( "%d\t", mat[lin][col] ); printf ( "\n\n" ); } printf ( "\n\nDiagonal principal\n\n" ); for ( lin = 0; lin < 2; lin++ ) { printf ( "%d\n", mat[lin][lin] ); for ( tab = 1; tab <= lin + 1; tab++ ) printf ( "\t" ); } soma = 0; int i = 0; while ( i<2 ){ soma += mat[i][i]; i++; } printf ( "\n\n A Soma da Diagonal principal é:%d\n\n", soma ); return 0;} você consegui o pior que é mostrar a matriz e tomar os dados e nao conseguiu isso? XD Já respondi um tema parecido essa semana aqui: http://forum.clubedohardware.com.br/forums/topic/1132542-fun%C3%A7%C3%A3o-que-receba-uma-matriz-3-x-3/ Sorte.
  9. "gestão de eventos de mouse e teclado c++" https://www.google.com.br/#q=eventos+do+mouse+C%2B%2B
  10. Eu ainda não entendi... você tem 2 vias com um programa desse tipo. Uma você cria o tabuleiro para que outros o resolvam, então você vai gerar o tabuleiro de palavra cruzadas. A outra via é você passar pelo processo de resolução do problema, ou seja você encaixar cada palavra no seu lugar correto para resolver o jogo. Então você quer gerar ou solucionar palavras cruzadas? Ambos casos saiba que não será nada fácil. Si quiser gerar busque coisas como "algoritmo para gerar palavras cruzadas", "algorithm to generate crossword" etc. Si quiser resolver busque coisas como "algoritmo para resolver palavras cruzadas" ou "algorithm to solve crosswords". Te pediram isso na escola? Porque me parece muito complexo o problema para um estudante.
  11. ninguém te vai ajudar por que você se ta explicando fatalmente difícil. você quer posicionar essas palavras em uma matriz é isso?
  12. A precisão.. Digamos que um float cabe algo como 1231313123.12312312312123 e um double pois cabe 12123131231312312313131313131313131313123131.12312313131313113131313131313123131313131313131231312313123123 pois isso XD, o dobro XD. É como o int e o long, ou lon long, a capacidade aumenta, porém não é a mesma coisa por que nao se guarda nos mesmos bytes, não estão bem alinhados para fazer uma comparar, ara comparar você compara 2 objetos iguais. digamos que o que acontece é isso float|| double| | v v0==00==00==00==0.==00==00==00==00==.?==0?==0?==0?==0?==0?==0?==0?==0o double tem o dobro de precisão ou seja isso é mais ou menos o que acontece
  13. vangodp

    Como fazer intro!

    Cara não sei não kkk. Eu não sou muito familiarizado com interfaces gráficas. XD
  14. Vamos lá... XD "deve" não é o mesmo que "tem que ser". Mais aí eu vou dar um ponto pra você, 1x0 ??? Pode sim... 1X1 XD float f = (float)10/3; Onde você fez o experimento?? Aqui: media = soma/12.0? Não vejo nenhum float, isso é um double . Não acredita? Prova isso: #include <stdio.h>int main() { float f; printf("Escreva 10.10 XD"); //XD scanf( "%f", &f ); if ( f == 10.10 ){ printf ( "2X1" ); }else{ printf ( "1X2 XD" ); } return 0;} Que aconteceu? Conseguiu comparar? XD Lógico que não né, pois é, o float 10.10 do if, em realidade é tão float como o float da sua solução "media = soma/12.0;". É um double hahah!!!! Quando você por 12.0, a variável soma, automaticamente se converte em double hahaha. Para que ele seja float você tem que fazer isso: #include <stdio.h>int main() { float f; printf("Escreva 10.10 XD"); //XD scanf( "%f", &f ); if ( f == 10.10f ){ //<---------------Aqui!!!!! (f) printf ( "2X0" ); }else{ printf ( "1X1 XD" ); } return 0;} Ou seja... você "deve" por f ao lado do seu 12.0f, então acontece o chamado cast implícito, e tanto soma, como 12.0f se convertem em float. Si não ponho nada o programa o pode tomar como double, que é a mesma coisa que 12.0lf. Bom... 1X1 XD Olhe como agora não da erro si tudo fossem tipos iguais: #include <stdio.h>int main() { double f; printf("Escreva 10.10 XD"); //XD scanf( "%lf", &f ); if ( f == 10.10 ){ printf ( "2X0" ); }else{ printf ( "1X1 XD" ); } return 0;} Por isso falei anteriormente que era melhor que tudo "deveria" ser float, ou double, para evitar essas conversões de tipo implícitas. ainda não... falta a f ao lado do 12.0 Então agora retire a eleição de melhor resposta do seu próprio post, e passe ela pra mim hahaha. É brincadeira hein hehe. Sorte
  15. vangodp

    Como fazer intro!

    Nao é coisa simples... você está acostumado a trabalhar com o prompt, para poder ver uma imagem você precisa de uma janela tipo render que te proporciona o windows. Isso você consegue criando um projeto de win32 aplication e seguindo esses passos: http://www.functionx.com/win32/Lesson14.htm Outra solução é você buscar uma biblioteca que faça isso por você, tipo Imagem I = "c:\\umaimagem.bmp" logo você pinta ela. Lógico que não é tão simples assim. porém essa pagina mostra uma biblioteca muito boa para isso(SFML), e ensina os passos para poder mostrar uma imagem: http://www.vivaolinux.com.br/artigo/Tutorial-SFML?pagina=6 você precisa acostumar a trabalhar de forma gráfica. Aqui é mais fácil com a documentação oficial da biblioteca eu acho: http://www.sfml-dev.org/tutorials/2.3/ Tem dicas de coisas desde instalar a biblioteca, até como mostrar uma imagem etc. Ela é muito poderosa. http://www.sfml-dev.org/tutorials/2.3/start-cb.php http://www.sfml-dev.org/tutorials/2.3/graphics-sprite.php
  16. A forma correta é da forma que você fez, mas não é a única forma #include <iostream>#include <cstring>using namespace std;struct Dados{ char frase1[100]; char frase2[100]; char frase3[100];};void foo(Dados d){ cout << d.frase1 << d.frase2 << d.frase3 << endl;}int main (){ Dados dados; strcpy( dados.frase1, "Hola " ); strcpy( dados.frase2, "mundo " ); strcpy( dados.frase3, "cruel!" ); foo(dados); foo ( (Dados){"Tem ", "polenta ", "quente."} ); // Outra forma =) cin.ignore(); return 0;}
  17. Beleza... Eu não entendi muito bem o que era para passar nesse char resp[] que você falou antes , da próxima vez diga o que você tem que enviar kkkk. Um truque é você empacotar 3 strings dentro de uma estrutura na qual fica muito mais fácil de passar ela a outra função. XDD
  18. A resposta é "Notação cientifica"... porém não me pergunte como é por que não tenho nem ideia kkkk
  19. A matriz deve ser float ou double, e a variavel soma também, todas as variaveis em realidade devem ser iguais, menos x, y que sao indices. si a matriz é de inteiros e você tentar guardar algo como 1.6 você vai perder o que tem depois do ponto, pois variáveis do tipo int não tem capacidade de guardar isso. #include <stdio.h>#include <stdlib.h>#define linha 4#define coluna 3float matriz [linha][coluna];int x, y;float media = 0;float soma = 0;int main() { for ( x = 0; x < linha; x++ ) { for ( y = 0; y < coluna; y++ ) { printf ( ">> Valor da linha %d e coluna %d: ", x+1, y+1 ); scanf ( "%f", &matriz[x][y] ); soma = soma + matriz[x][y]; } printf ( "\n" ); } media = soma / 12; for ( x = 0; x < linha; x++ ) { for ( y = 0; y < coluna; y++ ) { printf ( " %f ", matriz[x][y] ); } printf ( "\n" ); } printf ( "\nA Soma: %f", soma ); printf ( "\nA media: %f\n\n", media ); system ( "PAUSE" ); } Outra coisa... comece a contar desde zero, e termine em linha-1 por exemplo, nos loops. Si eu declaro char palavra [10]; eu tenho desde palavra[0] até palavra[9], isso são 10 números, nunca devo parar em palavra[10] por que si conto de 0 a 10 são 11 números, você passou 1, e em C isso é um erro grave.
  20. #include <stdio.h>main() { float valvula; printf ( "\nValvula:" ); scanf ( "%f", &valvula ); if ( valvula == 1.6f ) { printf ( "\nCarro economico\n" ); } getchar(); return 0;} Ao tratar de uma literal, si não por nada ao lado do 1.6 ele pensa que se trata de um double. Veja como ele agora funciona... #include <stdio.h>main() { double valvula; //agora é double printf ( "\nValvula:" ); scanf ( "%lf", &valvula ); //%lf <-especificador para double if ( valvula == 1.6 ) { //double == double correto printf ( "\nCarro economico\n" ); } getchar(); return 0;} Somente mudei o tipo de float a double e ele funcionou, por que ele compara agora double com douuble. Em outras palavras, antes você tinha float == double, por isso dava errado, se trata de 2 tipos diferentes, ao por o f ao lado do 1.6f você tem float == float, então assim sai correto(valvula == 1.6f OK). Entendeu? E não use virgula, use ponto.
  21. Não confie em programas... Faça uma copia do seus dados o mais rápido possível, incluindo si você tiver uma partição "oculta" com a imagem do sistema operativo original. Si esse disco der pau e você tiver tudo dentro diga adeus a seus dados. Por outro lado observe si o pc esta precisando de uma limpeza nos ventiladores, quando o pc se sobreaquece costuma apagar e dar erros, não é seu caso porém não custa estar seguro nisso. Si seu disco tiver muitos anos ou muitas horas de trabalho provavelmente ele esteja apresentando falhos mecânicos. tome isso como aviso e prepare-se. Encoste o ouvido, si ele fizer ruídos estranhos como tic tic, clack, ou zumbidos quando tenta ler algo isso é sinal que esta falhando. Não da para ser exato por que é grande o numero de falhos que pode ter, o melhor que te posso aconselhar é que não deixe muitas coisas importantes nele. Faça uma imagem dele antes do desastre. Sorte!
  22. Para entender isso você deve saber primeiro que é o que espera qualquer condicional. Uma condicional como if() simplesmente espera saber se o resultado de uma expressão é verdadeira ou falsa conforme as tabelas de verdades. por exemplo se eu fizer 1==1 vai devolver true ou seja 1, porque 1 realmente é igual a 1, outra coisa diferente é 1 == 2, nesse caso gera false, porque 1 é diferente a 2. Quer saber se o que eu digo é verdade, gostaria de ver com seus próprios olhos? Pois teste aí: printf ("%d", (1==1) ); //verdadeiro vai imprimir 1sao iguais printf ("%d", (1==2) ); //falso 1 é diferente de 2 imprime zero printf ("%d", (1<10) ); //verdadeiro, 1 é menor que 10, imprime 1 printf ("%d", (1>10) ); //falso 1 é menor que 10 não maior, imprime zero printf ("%d", !(1==1) ); //verdadeiro, deveria imprimir 1, porém o operador de negação(!) que esta adiante inverte o resultado a zero. .... Como sua função retorna 0 em todos os casos VENCEDOR() == 0 é exatamente 0 == 0, zero é igual a zero? Sim! Então é verdadeiro e por isso entra ao você comparar com zero. faça o teste printf ("%d", (VENCEDOR() == 0) )... vai imprimir 1, porque 0 é igual a zero, e não, zero é igual a 1. Lembre que ao if o que importa é true o false SEMPRE. Agora vamos ver os operadores... a == b igualdade. Ele quer saber se 2 números são iguais, se for assim então ele devolve true, se são diferentes devolve falso a < b menor que. devolve true se o operador da esquerda é menor que o da direita, se não devolve false. a > b maior que. A mesma coisa só que quer saber se o da esquerda é maior que o da direita, se for assim devolve true, senão, false. a <= b menor ou igual. true se a é menor ou igual que b, senão devolve false. a >= b maior ou igual. true se a é maior ou igual que b, senão devolve false traz a avaliação. a != b diferencia. Se a é diferente de b então devolve true, é o contrario de == que devolve true quando são iguais, != devolve verdadeiro ao serem diferentes. a && b "a e b verdadeiros?" se a e verdadeiro e b também devolve verdadeiro senão devolve falso. Lembrando que falso é 0 e verdadeiro é tudo o que for diferente de zero, incluindo números negativos são considerados verdadeiros. a || b "a ou b verdadeiros?" devolve verdadeiro se ao menos um ou ambos forem verdadeiros, e só devolve falso se ambos forem falsos. Se a for verdadeiro, a comprovação se detêm, pois o que interessa saber é se pelo menos um deles é verdadeiro, se a é verdadeiro não ha necessidade de checar b. !a Operador negação. Se a for verdadeiro, o operador de negação o inverte a falso, igualmente se for falso ele o inverte para verdadeiro. Se imprimir printf ("%d", !10 ); vai imprimir zero, por que o 10 é verdadeiro, porém como leva o ! adiante inverte a false. Se fizer printf ("%d", !0 ); imprime 1 por que 0 invertido é true. Se por adiante de um resultado como !(1==1) da falso, porém tem que por as () para separar uma coisa da outra. Espero não ter esquecido algum operador, porém você pode buscar informação mais completa por internet. Não se importe com isso, que o programa entre no if somente quando VENCEDOR() for igual a falso não quer dizer nada, o importante é você saber por que ta entrando e que você tenha tudo baixo controle, se ainda assim não estiver satisfeito, troque os return 0 por return 1 e tudo solucionado, você já pode fazer VENCEDOR() == 1, mas é pura estética. XD Hasta luego! XD
  23. nao sei muito de C# porém seu erro é que você esta tentando converter tipos de dados double em string. Para issi você precisa de algum metodo que o permita fazelo. Isso é um double: 3.14 e você que converter a "3.14". Busque em google "convert double to string Csharp"

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!