Ir ao conteúdo
  • Cadastre-se

vangodp

Membro Pleno
  • Posts

    1.752
  • Cadastrado em

  • Última visita

Tudo que vangodp postou

  1. Tenho uma HX1000 e nem esquenta... o ventilador fica parado o dia todo sheusheushsu. Quanto mais eficiente menos esquenta.
  2. como eu n fico tirando os módulos o dia todonão me atrapalha. Para tirar os módulos é só remover o ventilador, não todo o conjunto >_< adicionado 2 minutos depois as liquidas são até melhor. Mas que acontece se a bomba parar? >_<
  3. 22graus con noctua, e os ventiladores giram tranquilos a 191RPM. É um i9-9900k
  4. int a, b, c; fscanf(arquivo,"[%d %d %d]", &a, &b, &c); adicionado 2 minutos depois quando você colocar algum char no scanf ele tem um efeito contrario ao de leitura... quer dizer que ele vai ignorar esses [ e ] adicionado 3 minutos depois você também pode fazer assim fscanf(arquivo,"%*c%d %d %d%*c", &a, &b, &c); adicionado 4 minutos depois Os especificadores de formato '%*c' ignoram qualquer char que cair nessas posições
  5. Se você esta lendo strings(%s) por que usa & na hora de ler? O scanf("%s", &nome[linha]) não leva & adiante de nome[linha] adicionado 2 minutos depois E acredito que existe formas mais efetivas de "limpar" o buffer que usando o fflush. scanf("%s%*c", nome[linha]); se não me engano economiza todos esses flush desnecessarios.
  6. O mesmo acontece com int, só que com int sim temos negativos, pois é um numero inteiro.
  7. tem outras coisas a tomar em conta. por exemplo que rango de valores vai tomar esse numero que vai ser pedido por teclado. um int aceita de -2147483648 a 2147483647 ou seja, negativos e positivos, seu programa vai aceitar negativos? adicionado 2 minutos depois Se seu programa aceitar negativos você pode fazer a declaração de maior e menor assim: int menor = -2147483648; int maior = 2147483647; Se seu programa não aceitar negativos vai ter mais problemas ainda porque um int sempre vai aceitar negativos adicionado 4 minutos depois Também tem outra solução no caso de não aceitar negativos. Trata-se de declarar inteiros sem sinal adicionado 16 minutos depois #include <stdio.h> #include <limits.h> int main() { //int menor = -2147483648; //int maior = 2147483647; //Da seguinte forma você precisa incluir limits.h int menor = INT_MIN; // É a mesma coisa que dizer int menor = -2147483648. int maior = INT_MAX; // É a mesma coisa que dizer int maior = 2147483647. return 0; } por que esses valores? Por causa que um int só aguenta esses valores: dai se não levar números negativos precisaria usar unsigned int. E seria assim: adicionado 18 minutos depois #include <stdio.h> #include <limits.h> int main() { unsigned int menor = UINT_MAX; // UINT_MAX é maximo valor que aguenta um unsigned int 4294967295, praticamente o dobro que int, mas n aceita negativos unsigned int maior = 0; return 0; } adicionado 22 minutos depois Para poder ler inteiros sem sinal(unsigned int) se faz assim: #include <stdio.h> #include <limits.h> int main() { unsigned int n; unsigned int menor = UINT_MAX; // UINT_MAX é maximo valor que aguenta um unsigned int 4294967295, praticamente o dobro que int, mas n aceita negativos unsigned int maior = 0; //para poder ler scanf("%u", &n);//prove 4294967295 printf("%u", n); return 0; } adicionado 23 minutos depois note que em vez de %d se usa %u tanto no scanf como no printf, isso aguenta numeros de 0 a 4.294.967.295 adicionado 26 minutos depois é o dobro do que agüenta int, mas n permite usar negativos. Na realidade sim agüenta, mais vai mostrar números estranhos. tente somar 1 a 4294967295, tipo, na hora de ler entre com 4294967296. Vai imprimir um bonito zero shuehsuehsushue adicionado 42 minutos depois O unsigned int é o denominado "número natural". Um número natural é um número inteiro não negativo N = { 0 , 1 , 2 , … } Só que um unsigned int é mais ou menos assim: unsigned int = { 0 , 1 , 2 , … , 4294967295}, ou seja, por enquanto que um numero natural não tem limite, o unsigned int sim tem limite, isso é assim porque a memória do computador é limitada, uma variável é só um pedaço da memoria, e por isso é limitada. Que acontece se tento estourar essa capacidade? Somar 1 a 4294967295 que acontece? Voltamos a ZERO!!! Por quê???? Porque acontece isso: imagina que você tem 0 , 1 , 2 , … , 4294967295 E ao lado dos números aos extremos você tem ...4294967295, 0 , 1 , 2 , … , 4294967295, 0... adicionado 58 minutos depois Por isso se diz que um unsigned int só suporta de 0 a 4294967295, por que se eu somar -1 a zero vai cair no 4294967295, e se eu somar 1 a 4294967295. De fato você pode somar o que quiser a Zero e 4294967295, só que você sempre estará entre Zero e 4294967295, por que você esta praticamente em laço. em outras palavras unsigned int é isso:
  8. para ficar mais fácil os passos são: declarar n, maior = 0, menor = 32000 //repetir 15 vezes -ler nota e atribuir a n -comparar n com "maior", se n for maior que a variável "maior", atribuir n a maior -comparar n com "menor", se n for menor que a variável "menor", atribuir n a "menor"
  9. Se a finalidade do seu programa é encontrar somente o maior e o menor valor de um X numerosentrados por teclado você só precisa de 3 variáveis, n, maior e menor. Basicamente é pegar n e comparar com maior(if(n>maior)), se for maior(verdadeiro) então atribuímos n a maior. O mesmo acontece com menor, se n menor que menor(if(n<menor)) atribuimos n a menor. Praticamente repetimos isso 15 vezes dentro de um for, e no final imprimir menor e maior.
  10. é a mesma coisa que fazer ele e printar em outro arquivo. >_< 1º ler arquivo e guardar tudo em um vetor 2º ordenar vetor 3º usar rewind para retorceder ao principio do arquivo 4º gravar Em teoria se você ja sabe ler e gravar em arquivos não há muito mistério
  11. E que é o que você deseja exatamente? fica meio difícil adivinhar em quais partes você tem duvida.
  12. ja aprendeu o uso de vetores? porque seria mais fácil usar laços for while etc
  13. você ta fazendo isso aqui errado-> void cadastro ( perfil *pessoa[50] ) { Um vetor e também as matrizes sempre se passam por referença, mesmo você passando ela por valor. É contraproducente tentar passar um array por valor, desde o ponto de vista da gestão de memória, ficar copiando conjuntos de dados de um lado para o outro é perder rendimento. Um array pode chegar a ser bem grande e conter muitos elementos, declarar variáveis tem um custe em memória e tempo de processamento, tendo em vista esse esse problema os criadores da linguagem acharam melhor que um array sempre que tentar passar ele para um função, ele será sempre passado por referença. No seguinte exemplo podemos observar esse ponto onde um array sempre é passado por referença mesmo passando ele por valor, somente precisamos imprimir suas direções tanto em main como na função que recebe o vetor: Prove esse programa e confira que dentro da função na realidade você esta editando o que está dentro do main mesmo n4ao tendo feito referença: #include<stdio.h> void foo( int v[100] ){ printf("Na função v aponta: %p\n", v ); } int main() { int v[100]; printf("Em main v aponta: %p\n", v ); foo(v); return 0; } continuo.... adicionado 1 minuto depois isso aqui-> "perfil *pessoa[50]" é um vetor de 50 ponteiros a perfil e não uma referença ao vetor que se encontra em main >_< adicionado 9 minutos depois Para você fazer uma ideia do que eu falo olha isso: #include<stdio.h> typedef struct{ char login[40]; int senha; }perfil; int main() { perfil pessoa[50]; pessoa[0].senha = 1001; pessoa[1].senha = 2002; perfil * ponteiro_a_pessoa[50]; //isso aqui se trata assim: ponteiro_a_pessoa[0] = &pessoa[0]; printf( "%d", ponteiro_a_pessoa[0]->senha ); return 0; } adicionado 11 minutos depois teria de associar as 50 pessoas ao 50 ponteiros >_< uma a um para funcionar adicionado 13 minutos depois São coisas implicitas da linguagem. Recorde isso.... "você nunca poderá passar um vetor ou matriz por referença, isso já acontece implicitamente quando você pensar que esta passando ele por valor". adicionado 19 minutos depois A explicação para isso é que você não pode passar um conjunto de variáveis, somente pode passar uma. quando você passa &v[0] você esta passando a direção da primeira variável, que a efeitos é o mesmo que passar v. Em outras palavras v==&v[0] que é a direção do primeiro elemento de um vetor(Como falei UM SÓ ELEMENTO... o primeiro). Como na memoria de um vetor cada elemento está um depois do outro, basta passar o primeiro, como C passa explicitamente por referença o primeiro, é fácil saber onde esta os seguintes. Tendeu? adicionado 32 minutos depois Agora Toda regra existe uma exceção Se realmente quiser passar um vetor por valor, ou seja uma cópia, é só passar o tal vetor dentro de uma struct. Uma struct é considerado uma só variável, e por isso faz vista grossa. #include<stdio.h> typedef struct{ int v[40]; }Dados; void foo( Dados d){ d.v[0]++;//em foo 1002 printf("foo: %d\n", d.v[0]); } int main() { Dados d; d.v[0]=1001; foo(d);//vai imprimir 1002 printf("main: %d\n", d.v[0]);//mas em main continua sendo 1001 return 0; } Isso prova que foo "recebeu uma cópia" adicionado 34 minutos depois Sempre que tiver duvidas faça um debug, imprima as direções de memórias si coincidem é referencia, si não é cópia. adicionado 55 minutos depois Arrumando sua função de cadastro o programa fica assim: #include <stdio.h> #include <stdlib.h> #include <locale.h> typedef struct { char login[40]; int senha; } perfil; void cadastro ( perfil pessoa[50] ); void acesso ( perfil pessoa[50] ); void Menu1 ( int *escolha ); int main() { setlocale ( LC_ALL, "Portuguese" ); perfil pessoa[50]; int escMenu1; Menu1 ( &escMenu1 ); if ( escMenu1 == 1 ) { acesso ( pessoa ); // mesma coisa que fazer acesso ( &pessoa[0] ); } else if ( escMenu1 == 2 ) { cadastro ( pessoa ); // mesma coisa que fazer cadastro ( &pessoa[0] ); } } void cadastro ( perfil pessoa[50] ) { system ( "cls" ); static int i = 0; FILE *a; a = fopen ( "perfilLogin.txt", "w" ); FILE *b; b = fopen ( "perfilSenha.txt", "w" ); if ( a == NULL || b == NULL ) { printf ( "Erro ao abrir arquivo" ); } else { if ( i < 50 ) { printf ( "Digite seu nome de Acesso: " ); fflush ( stdin ); fgets ( pessoa[i].login, 40, stdin ); printf ( "\n" ); printf ( "Digite sua senha: " ); fflush ( stdin ); scanf ( "%i", &pessoa[0].senha ); printf ( "%s", pessoa[0].login ); printf ( "%i", pessoa[0].senha ); if ( i < 50 ) { fputs ( pessoa[0].login, a ); fwrite ( &pessoa[0].senha, 40, 1, b ); i++; } } } fclose ( a ); fclose ( b ); } void acesso ( perfil pessoa[50] ) { /* system ( "cls" ); FILE *a; a = fopen ( "perfilLogin.qz", "r" ); FILE *b; b = fopen ( "perfilSenha.qz", "r" ); char login2[40]; int senha2[40], i; printf ( "\n" ); printf ( " Login: " ); fflush ( stdin ); fgets ( pessoa->login, 40, stdin ); printf ( "\n" ); printf ( " Senha: " ); fflush ( stdin ); scanf ( "%i", pessoa->senha ); fread ( login2, 40, 1, a ); fread ( senha2, 40, 1, b ); if ( pessoa->login == login2 ) { printf ( "Conseguiu !!" ); } fclose ( a ); fclose ( b ); */ } void Menu1 ( int *escolha ) { printf ( " =============================== \n" ); printf ( " Escolha uma ação: \n" ); printf ( "\n" ); printf ( " 1 - Acessar / Jogar\n" ); printf ( " 2 - Novo usuário\n" ); printf ( " 3 - Acesso de Admin\n" ); printf ( " =============================== \n" ); printf ( " Escolha: " ); scanf ( "%i%*c", escolha ); } Agora tenta arrumar a função de acesso. Se conseguir posta ai para outros possiveis usuarios que usem a modo de consulta, caso contrario continue consultando as partes onde tiver maior problema.
  14. tem que usar & no fscanf &vet[0] &vet[1] &vet[2].... é como ler a um float ou int: scanf("%f", &X);
  15. você não colocou os protótipos das funções antes do main, é como si não existisse essas funçoes. Tudo o que for ser usado em um programa em C/C++ deve ter sido declarado previamente antes de ser chamado, tanto funções como variáveis, e classes no caso de c++.
  16. Já comentei isso faz pouco tempo. Da uma lida ai para entender melhor o por quê.
  17. Ja comentei isso aqui faz pouco tempo. Da uma lida pra entender o negócio. >_<
  18. Poder até pode. Na verdade nem sei em que afeta, mas posso fazer uma ideia. Quando você lança uma biblioteca para usuários finais, muitas vezes costuma as implementações(funções) estar dentro de DLLs, e o que você precisa para realmente usar usar essa biblioteca é incluir é a declaração da classe e não ter acesso as implementações. Pior ainda, imagina que sua biblioteca seja de pago$$$, vai dar acesso ao algoritmo? Ao distribuir uma biblioteca você não precisa dar os .cpp, você pode dar os .cpp pré compilados ou em DLLs. Acredito que essa seja a maior razão de peso, mas se alguém quiser aportar algo mais estarei encantado em aprender também shuesheush. Pense em como você faz o que faz usando as bibliotecas de outros, você faz o include e nem lhe interessa saber como funciona mas sim usar suas funcionalidades. Um carro por exemplo, quando você compra ele, você tem os pedais, a marcha, os botões para acender os faróis, etc, mas você não abre o motor para ver como funciona, mais ou menos sabemos que um motor pode ter 4 tempos etc, mas o que lhe interessa é sentar a ***** no banco e dirigir. Quando você usa ioestream por exemplo você sabe como ela funciona? Importa como funciona internamente? Não! Então! Mas você pode fazer a inclusão da classe e usar ela sem problemas. Obviamente nem tudo vai estar em dlls, mas é uma opção, se puser tudo no .h como você diz fica difícil pre-compilar. Acredito que isso seja meio que como a religião... você precisa acreditar, a prova você acha depois de morto HAHAHA. Brincadeira suehsuehsh, Com o tempo você vai ver o porque, realmente nos seus programas nada lhe impede por tudo no .h, mas ta ai as boas praticas do programador e todos deveriam saber para que assim todos sejamos capazes de entender os programas uns dos outros, pois lembre que você não esta programando só para você, outros irão ler seu programa, e se for muito difícil provavelmente quando você trabalhar para uma empresa seu chefe vai lhe mostrar como fazer da forma certa hsuehsueh. Lembre que a declaração da classe é um contrato com o usuário, um contrato que garante que esse usuário vai poder usar certas funcionalidades do seu programa, mas que não deveria poder tocar certas partes do seu código, se não gostar do que esta usando sempre poderá criar ele mesmo suas bibliotecas, mas dai entra em jogo o a tal filosofia de "não reinventar a roda" blablabla.
  19. você criou um projeto? Ta usando codeblocks? que tutorial é esse? Dê mais dados sobre seu problema. Se for no codeblocks precisa criar um projeto.
  20. não entendo o motivo da sua consulta.... você quer carregar esses dados no seu programa, é isso? Se for assim você pode exportar os dados como csv e ler eles desde seu programa.

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!