Ir ao conteúdo
  • Cadastre-se

Flávio Pedroza

Membro Pleno
  • Posts

    2.074
  • Cadastrado em

  • Última visita

Tudo que Flávio Pedroza postou

  1. Tenta assim, sem colocar o fgetc na condicional do while: int leitura(const char nomeA[]) { char ch; int i; FILE *arq; fopen_s(&arq, nomeA, "r"); while (1) { // EXISTEM 6 PIPES, LOGO I DE 0 ATÉ 5 for (i = 0; i<6; i++) { if (i == 0) printf("\nSOBRENOME: "); if (i == 1) printf(" NOME: "); if (i == 2) printf(" ENDERECO: "); if (i == 3) printf(" CIDADE: "); if (i == 4) printf(" ESTADO: "); if (i == 5) printf(" CEP: "); while ((ch = fgetc(arq)) != '|') { if (ch == EOF) { fclose(arq); return 0; } printf("%c", ch); } printf("\n"); } } return 0; }
  2. É assim que scanf funciona, ele considera espaço fim de leitura da variável. Use fgets. Ele lê tudo: printf("Qual seu nome: "); fgets(nome, 31, stdin); nome[strlen(nome)-1]='\0'; //remove o ENTER - fgets lê tudo, inclusvie o "ENTER"
  3. É por causa do condicional do while: while(ch = (fgetc(arq)) != EOF) você lê o primeiro caractere de cada linha e não imprime. Veja se inserindo um printf logo após resolve: while(ch = (fgetc(arq)) != EOF) { printf("%c",ch);
  4. você começa com maiorMedia = 0 e menor Media = 10.0 Faça um laço para somar cada coluna e tirar a "media" . Se "media" maior que "maiorMedia" faça "maiorMedia" igual a "media". Se "media" menor que "menorMedia", faça "menorMedia" igual a media;
  5. Bom, o nome tem mais de um caractere, então dever ser um array de char Sexo pode ser um caractere único (m ou f) char nome[31]; //nome com até 30 letras char sexo; scanf("%c", &sexo); //%c e não %s E a sintaxe correta para condicionais: if ((sexo == 'f') && (idade <30 )) //"==" para comparar e sem ";" no final, ok? { printf("%s ,ACEITA", nome); } else //else - caso contrário { printf("%s , NÂO ACEITA", nome); }
  6. Não sei se era essa sua dúvida, mas você pode usar a função "srand" e "rand()" para gerar números aleatórios em c #include <time.h> srand (time(NULL)); int civilizacao1 = rand()%4; int civilizacao2 = 0; do { civilizacao2 = rand()%4; } while (civilizacao2 == civilizacao1); O código acima vai gerar um número aleatório entre 0 e 3 para cada civilização e escolhe duas diferentes (civilizacao1 e civilizacao2). Ai você define, por exemplo, 0 - ROMANOS, 1 - AZTECAS, etc. Para gerar um número de ataque você pode usar o seguinte: int Ataque = ROMANS.Military_Force + (rand() % 51); Ataque vai ser um número aleatório entre 50 e 100.
  7. a função "novoAluno" pede dois parâmetros, você só passou um. Tenta assim. int main() { sala *sistemas2; sistemas2 = criaSala(); novoAluno("lucas",sistemas2); cout <<" "<< novoAluno("joão", sistemas2)<<endl; delete sistemas2; //tem que limpar a memória, ok? c++ não tem garbage collector return 0; } vai ser impresso o número "1";
  8. for(int i=0;i<22;i++){ for(int j=0;j<80;j++){ //CONTANDO CELULAS VIVAS AO REDOR DA CELULA ATUAL cont = 0; if(mundo[i-1][j-1] == '*' && mundo[i][j] != '*') { cont++; } if(mundo[i-1][j+1] == '*' && mundo[j] != '*') { cont++; } Nesta parte, o que irá acontecer no início do laço, quando i e j forem zeros? Quando será i-1 e j-1? E se j = 79, quanto será que será j+1? você está extrapolando os limites do array Outra coisa esse tipo de condicional if (a>1 && a < 2) é ambiguo. Separa com parenteses para evitar problemas: if ((a>1) && (a < 2)) Uma possível correção seria algo assim: for(int i=0;i<22;i++){ for(int j=0;j<80;j++){ //CONTANDO CELULAS VIVAS AO REDOR DA CELULA ATUAL cont = 0; if ((i > 0) && (j > 0)) if ((mundo[i-1][j-1] == '*') && (mundo[i][j] != '*')) cont++; if ((i >0) && (j < 79)) if ((mundo[i - 1][j + 1] == '*') && (mundo[i][j] != '*')) cont++; Veja os outros casos em que há possibilidade de extrapolar o limite do array. Outro erro é que você alterar o array dentro da função, mas passou como constante, então as alterações não são salvas. Retire o const: void alterageracoes(char matriz[][80]); As alterações da matriz dentro da função são salvas e então você passa ela novamente como argumento para calcular a próxima geração. Não há necessidade da outra matriz geracoes; Outro erro que encontrei foi na hora de alterar a matriz: if(cont==0 && mundo[i][j] =='*'){ geracoes[i][j]==' '; } O "==" é só para comparar. Para atribuir, utilize apenas um "="; if ((cont==0) && (mundo[i][j] =='*')) mundo [i][j]=' '; Veja se com isso resolve.
  9. Faltou o índice do array "guardar": for(i=0; i<500000; i++) { fgets(guardar[i].placa, 8, arq); } Recomento inclui o código abaixo antes do laço e logo após o "fopen" , para verificar se realmente o arquivo foi aberto: if(arq == NULL) { perror("Erro abrindo arquivo"); return(-1); }
  10. Para o windows, se quiser algo legalizado, como o seu computador é novo, tente comprar uma licença COEM, acho que é mais barata.
  11. você tem que preencher o "p" com os valores antes de imprimir: //(...) int i, j, troca = 0;//não esquecer de inicializar "troca" //(...) int *p; p = (int *) malloc(troca*sizeof(int)); memcpy (p, mostra, troca*sizeof(int));//copia o conteúdo de mostra em p for(i = 0; i < troca; i++ ) { printf("O elemento na [%d] posicao = %d \n", i, p[i]); } free(p);//tem que liberar a memória alocada antes de sair Acho que assim vai funcionar (não testei).
  12. Passa um jato de ar na placa-mãe e nas portas USB - aproveita e faz uma limpeza geral. Pode ser defeito na placa-mãe e ela estar acusando um falso curto ou pode ser um curto verdadeiro. Como você diz que funciona por horas antes de dar problema, pode ter relação com o aquecimento excessivo de algum componente, provavelmente o PCH que foi citado por @GabrielLP14 Infelizmente não sei dizer se há risco para as demais peças ou se é seguro continuar a usar assim mesmo.
  13. Pode ser que seja alguma sujeira metálica em alguma porta ou na própria placa-mãe - ou até mesmo defeito na placa-mãe. Acredito que seja isso o problema pois acontece exatamente como você descreveu quando alguém provoca um curto em uma porta USB (ex.: enfiar um clips de metal): som de desconexão seguido de desligamento das USBs até que o PC seja desligado e religado novamente. Não acho que seja algum problema de software (drivers).
  14. Pode ser que algum dispositivo ligado na USB esteja entrando em curto - quando isso acontece o computador desligar a alimentação da USB.
  15. clientes[i].nome == nomepesquisa Não é assim que se compara strings em c. Use "strcmp". Veja os posts anteriores.
  16. Tenta esse algoritmo: char temp; for(int i = 1; i < n; i++){ for (int j = 0; j < n-1; j++){ if(A[j] > A[j+1]){ temp = A[j]; A[j] = A[j+1]; A[j+1] = temp; } } }
  17. Ok, encontrei um erro de lógica no seu programa. você deve chamar o malloc após definir o n: printf("Digite o tamanho o vetor:\n"); scanf("%d",&n) A= (char*)malloc(n); Para ler e imprimir use "%c", pois o "%s" e para strings: printf("Digite os caracteres da string que voce quer:\n"); for(i=0; i<n; i++) { scanf("%c",&A[i]); } printf("Strings em ordem:\n"); for(i=0; i<n; i++) { printf("%c",A[i]); }
  18. você que ordenar strings ou caracteres dentro de uma string? ( o programa do link está fazendo o último).
  19. você usa "strncpy" para copiar parte do string para outro e imprime. Por exemplo: #include <iostream> #include <string.h> int main() { int i = 2; //quais letras vou pular no começo int n = 4; //quantas letras vou copiar char str1[]= "DANILO"; char str2[7]; //7 pois são seis letras + o 0, que marca o fim do string strncpy (str2, str1+i, n); //pulei as duas primeiras letras e vou copiar quatro -> NILO str2[n] = '\0'; //marca o fim do string printf ("%s\n", str2); //imprime NILO } O exemplo só imprime um, mas você pode fazer um laço para variar "i" e "n" e terá o resultado que quer, desde de o "'O" até a palavra completa. Alternativamente, você pode usar printf desta maneira: printf ("%.*s\n", n, str1+i);
  20. scanf ("%s",&clientes[i].nome); Acredito que o certo seria, em termos do padrão: scanf ("%s",clientes[i].nome); você poderia desenvolver um programa para fazer o inverso, ao invés de salvar, ler os dados armazenados em um arquivo e transferi-los para um array na memória (ex. clientes). Após ler os dados do arquivos, você deve solicitar ao usuário o nome a ser pesquisado e depois varrer todos os endereços armazenados comparando os nomes. Veja o exemplo abaixo (não testei, pode ter alguns erro sintaxe/lógica): #include <string.h> struct dados clientes[10]; ... //ler arquivo .txt e amarzenar dados no array clientes ... //pesquisa do { char cliente[40]; printf ("Entre o nome do cliente para pesquisar:"); scanf ("%s", cliente); for (int i = 0; i < 10; i++) { if !strcmp(cliente, clientes[i].nome) { printf ("Telefone: %d", clientes[i].telefone); break; } } } while (strlen(cliente) > 0); O programa para quando você digitar um nome em branco.
  21. N é o a quantidade de pontos. No seu caso, você fixou como 2 (TAM). Σxy (somatório do produto) não é a mesa coisa que Σx*Σy (produto do somatório), assim como Σx2 (soma dos quadrados) não é igual a (Σx)2 (quadrado da soma). Vai precisar criar mais variáveis auxiliares. Alem disso o problema pede que você leia uma série de coordenadas x e y. Acho que você deveria primeiro ler o valor de N e depois criar dois vetores x e y: int n=0, i; printf("Digite um valor N \n"); scanf("%d",&n); float x[n],y[n]; //Leitura de x e y printf("Digite valores das cordenadas x e y: \n"); for(i=0; i<n; i++){ scanf("%d %d",&x[i], &y[i]); } A partir desse array de coordenadas x e y você calcula a e b . Ex.: float somax = 0, somay = 0; somaxy = 0; somax2 =0; for (int i = 0; i< n; i++) { somax+=x[i]; somay+=y[i]; somaxy = x[i]*y[i]; somax2 = x[i]*x[i]; } Veja se consegue implementa o resto.
  22. Testei e funcionou pra mim. De todo modo, uma sugestão para otimizar um pouco e imprimir apenas no final, a formula converge muito lentamente. Também removi algumas multiplicações: #include <stdio.h> #include<math.h> int main() { double pi = 0; int i = 0; int k = 4; while(pi != 3.1415926535) { pi += (k)/(2.0*i+1); // printf("%.10lf\n",pi); // remover para ir mais rápido i++; k = -k; } printf("%.10lf\n",pi); return 0; }
  23. Tenta assim while ((Math.Abs(somah1)>0.001) || (Math.Abs(somah2) > 0.001) || (Math.Abs(somah3) > 0.001)) { //Bloco de código }
  24. Vou botar um exemplo aqui e espero que ajude: Ex. 12.456 s divida 12.456 por 60 e ache o quociente inteiro e o resto (quociente 207 e resto 36) - este resto será o segundos. (TIME.segundos) divida 207 por 60 e novamente ache o quociente inteiro e o resto (quociente 3 resto 27) - este resto serão os minutos (TIME.minutos); as horas serão o quociente 3 (TIME.horas); 3h:27m:36s. Use "fmod" para determinar o resto de números com ponto flutuante. Para a função addTime você pode converter de TIME em segundos, somar, e depois converter novamente de segundos para TIME. Veja se consegue implementar o código.

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!