Ir para conteúdo
Fórum Script Brasil

Nefisto

Membros
  • Total de itens

    36
  • Registro em

  • Última visita

Tudo que Nefisto postou

  1. #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_ITENS 10 int main () { char fileName[50]; FILE* file; int i = 0; int j; for (i = 0; i < MAX_ITENS; i++) { sprintf (fileName, "arq%d.txt", i); file = fopen (fileName, "w"); j = 0; while (j < 1048576){ fprintf (file, "0"); j++; } fclose (file); } return (0); }
  2. A sim, desculpa, erro meu, nem tinha olhada a foto do seu problema, porem o erro q eu flei ainda é valido hehe Isso acontece porque o compilador le de cima para baixo, quando ele chega na funcao "MAIOR", ele ainda não sabe que ela existe, porque ela foi criado em baixo da main, você tem duas opcoes: 1: crie um cabecalho colocando em cima do main void maior(int *a, int *b); 2: Copia e cola a funcao maior pra cima do main
  3. Troca -> if (a > b) por if (*a > *b)
  4. Agora ta certinho 😜 Pega o habito de conferir o retorno da funcao, o atoi retorna um int e não um vetor de int, o vetor é desnecessario (como você mesmo percebeu) Dica: Uma boa maxima quando se esta programando é -> "Se você digitar mesmo codigo mais do que 2 vezes, pare e volte, a chance de estar errado é muito grande" Ota: Encontre um bom balanco entre "readability vs efficiency", não sei como traduz pro portugues, seria legivel? enfim, você esta verificando se a data esta no range de 48 a 57, que são as letras 0 e 9, só q a não ser q você se lembre da tabela ASCII você não vai lembrar o que isso faz daki um mes, e qualquer outra pessoa q for ler vai achar q isso é gambiarra: Deixe as coisas legiveis, para o seu proprio bem (data[9] > '9' || data[9] < '0') Acho q de grosso é isso, com o tempo o seu codigo vai enxugando, afinal, o melhor agoritmo é aquele que você sabe fazer =D Abracos
  5. @princknoby Vou deixar um código pronto lá embaixo, mas se quiser q a gente julgue o seu, coloque ele aqui q a gente confere os enganos Só uma dica: q eu acho valiosa, como você está começando, procura usar as funções prontas somente quando for algo muito cabeludo pra fazer na unha. Tente fazer as suas próprias funções sempre que possível. Outra dica: Essa talvez você queira ignorar e deva se achar que não ta certo, quando você for fazer exercícios para aprender, exercícios que você não precisa entregar nem mostrar pra ninguém, procure evitar fazer esses exercícios que peçam essas bobei rinhas de verificar entrada de usuário, eles não desafiam o seu intelecto, só são cansativos e chatos de serem feitos, claro quando é um professor que está pedindo, você faz e entrega pra ele mas quando está resolvendo na sua casa, PULE, ninguém aprende C verificando se o ursoario digitou "batata" quando você pediu a IDADE dele, uma regra legal q um professor me passava era "Suponha que a entrada sempre esteja correta", dessa forma você só se preocupa com o algoritmo, que é o que interessa 1- Apesar de estar em um loop, você não faz nenhuma relação entre o contador e algo dentro do código. O cabeçalho do atoi é: int atoi(const char *str) O que significa q ela recebe uma string e devolve um inteiro, supondo q data é a string que contem a data completa -> "12/02/1992", o que você esta fazendo é converter toda data duas vezes para a variavel dia, perceba q você esta tentando converter tdo, com barras e 8 algarismos. Resposta: Provavelmente tem erros, mas a ideia ta aew, espero ter ajudado, abracos e bons estudos /*Leia uma cadeia de caracteres no formato “DD/MM/AAAA” e copie o dia, mês e ano para 3 variáveis inteiras. Antes disso, verifique se as barras estão no lugar certo, e se DD, MM, e AAAA são numéricos. Caso algum deles não seja, ou alguma barra estiver fora do lugar ou faltando, informe para o usuário qual foi o erro e peça para repetir a operação. Faça isso até que ele forneça os dados corretamente. */ #include <stdio.h> #include <stdlib.h> enum Erros { BARRAS_ERRADAS = 2, NUMEROS_ERRADOS, PALAVRA_MAIOR }; //Comecamos criando 2 funcoes de suporte para solucionar //nosso exercicio //// ACHEI que a gente fosse usar o atoi, mas acabou que não usamos, de qualquer maneira //// a dica de você criar suas proprias funcoes ainda é valida, então vou deixar o MyAtoi //// para você dar uma olhada // Conversor de string para numero int MyAtoi (const char *a) { int i; int result = 0; // Você não precisa intender isso, mas seria legal // se o fizesse, não é muito complicado e é uma // solucao q eu acho bem sutil for (i = 0; a[i]; i++) result = result * 10 + (a[i] - '0'); return result; } //Valida a entrada do usuario //RETORNOS: // 1 -> A palavra esta no formato NN\\NN\\NNNN // 2 -> A barra esta no lugar errado // 3 -> Algum dos numeros foram colocados de maneiro erronia // 4 -> Foram digitados mais numeros do que o nescessario char VerificaEntrada (const char *data) { int i = 0; char limSup = 0; for (i = 0; data[i]; i++) { // As barras precisam estar nas posicoes 2 e 5 da string if (i == 2 || i == 5) { if (data[i] != '\\' && data[i] != '/') return 2; // ta errado } else //todo o resto tem q ser um digito de 0 a 9 { switch (i) { //Dezena do dia case 0: limSup = '3'; break; //Unidade do dia case 1: if (data[i-1] >= '0' && data[i-1] < '3') limSup = '9'; else limSup = '1'; break; //Dezena do mes case 3: limSup = '1'; break; //Unidade do mes case 4: if (data[i-1] == '0') limSup = '9'; else limSup = '2'; break; //Milhar do ano case 6: limSup = '2'; break; //Centena do ano case 7: if (data[i-1] < '2') limSup = '9'; else limSup = '0'; break; //Dezena do ano case 8: if (data[i-2] < '2') limSup = '9'; else limSup = '1'; break; // Unidade do ano case 9: if (data[i-3] < '2') limSup = '9'; else limSup = '8'; break; } if (data[i] < '0' || data[i] > limSup) return 3; } } //Caso a palavra seja maior do que deveria ser if (i != 10) return 4; return 1; } int main () { //Armazena a data que sera entrada char data[20]; int i = 0; int tmp = 0; while (1) { printf ("DD\\MM\\AAAA\n"); scanf ("%s", data); if ((tmp = VerificaEntrada (data)) == 1) break; switch (tmp) { case BARRAS_ERRADAS: printf ("Erro na barra\n"); break; case NUMEROS_ERRADOS: printf ("Algum numero ta errado\n"); break; case PALAVRA_MAIOR: printf ("A palavra esta maior do que era nescessario\n"); break; } } return (0); } Edit: ----------------------------------------------------------------------------------- Aqui uma maneira de fazer seguindo o raciocinio que você propos int main () { //Armazena a data que sera entrada char data[20]; int i = 0; int dia, mes, ano; int tmp = 0; while (1) { printf ("DD\\MM\\AAAA\n"); scanf ("%s", data); //Coloca \0 nas posicoes esperada de forma manual data[2] = '\0'; data[5] = '\0'; // Onde fica a primeira barra dia = MyAtoi (data); mes = MyAtoi (&data[3]); ano = MyAtoi (&data[6]); printf ("%d\t%d\t%d\n", dia, mes, ano); } return (0); }
  6. Ola @princknoby, vou tentar ajudar com o que for possivel. Não se preocupe, strings são confusas para todos que estão começando. COMENTARIOS: Antes de começar, gostaria de destacar alguns pontos do seu código. 1- Cuidado com essa função, apesar de estar funcionando, caso a primeira entrada não satisfaça o loop, o seu codigo fica presso nele já que o "ch" não é alterado. Caso seja do seu interesse abaixo vou deixar uma macro que um professor me passou para limpeza de buffer #define CLEAN_BUFF do{ int c; while((c = getchar()) != '\n' && c != EOF);}while(0) 2- Nunca tinha visto a entrada limitando quantidade de caracteres, aprendi essa agora hehe obrigado SOLUCAO: Agora sim, vamos ao codigo, optei por refazer e comentar, espero que dessa maneira seja o suficiente para sanar suas duvidas. #include <stdio.h> #define MAX_PESSOAS 10 #define MAX_NOME 100 #define CLEAN_BUFF do{ int c; while((c = getchar()) != '\n' && c != EOF);}while(0) int main () { // O limite de pessoas é 10, porém o codigo pode encerrar antes. // essa variavel controla situacoes onde ele acabe antes unsigned qtdPessoas = 0; /// Na situacao abaixo, ///o nome guardado em nomes[1] esta LOGICAMENTE ligado a idades[1] // Uma matriz de strings é como um lista de nomes char nomes[MAX_PESSOAS][MAX_NOME]; // E nós faremos uma ligacao logica¹ entra a matriz de nome e o vetor de idades int idades[MAX_PESSOAS]; // Vamos armazenar o indice do mais velho e mais novo aqui int velho = 0, novo = 0; //Contadores int i; // Inicialmente vamos supor que nosso codigo ira rodar da forma esperada // onde as 10 pessoas são inseridas for (i = 0; i < MAX_PESSOAS; i++) { printf ("Nome: "); scanf ("%99[^\n]", nomes[i]); CLEAN_BUFF; printf ("Idade: "); scanf ("%d", &idades[i]); CLEAN_BUFF; //Caso a idade entrada seja negativa, o loop se encerra if (idades[i] < 0) break; // Caso contrario uma pessoa foi adicionado e a nossa variavel de controle // deve ser incrementada else qtdPessoas++; } // As variaveiz velho e novo comecaram em 0, significa que inicialmente // a primeira pessoa é a mais velha e a mais nova ao mesmo tempo for (i = 1; i < qtdPessoas; i++) { // Se a pessoa atual for mais velha que o mais velho conhecido if (idades[i] > idades[velho]) velho = i; // Se a pessoa atual for mais nova que o mais novo conhecido if (idades[i] < idades[novo]) novo = i; } printf ("Velha:\n%s\t%d\n", nomes[velho], idades[velho]); printf ("Novo:\n%s\t%d\n", nomes[novo], idades[novo]); return (0); }
  7. Nefisto

    EOF, '\0' e '\n'

    @vangodp falei besteira?? hehe não intendi o emoticon, caso eu tenha falado bobeira, favor me corrija
  8. Nefisto

    EOF, '\0' e '\n'

    Olá @princknoby, Seria mais fácil perguntar se existe alguma semelhança hehe. Resposta rápida: EOF -> usada quando se trabalha com arquivos para verificar se ainda existe conteúdo para se consumir. '\0' -> indicador de final de palavra, usado em vetores de char '\n' -> caractere que indica quebra de linha (A resposta longa coloquei no final) Quanto a segunda dúvida, no seu caso as três são bem diferentes, supondo que string seja um vetor de caracteres: 1-Isso verifica se o ponteiro string é NULL (o que não faz sentido, logo é um erro semântico) 2-Isso também não faz sentido, você está verificando se o caractere em questão é igual a -1, porém não existem caracteres negativos, e mesmo que você estivesse lidando com arquivos ainda estaria errado pois você não pode usar indexadores em FILE* 3-Esse caso já está OK, supondo que você esteja procurando por quebras de linha em sua string, o que eu creio não ser o caso Os três são diferentes e creio eu que nenhum faz o que você gostaria, supondo que você queira caminhar por uma palavra uma maneira bacana seria: for (i = 0; string[i] != '\0'; i++) {...faz algo bem bacana...} Só como um detalhe, perceba que a expressão ... string != '\0' ... é opcional, como ela retorna 1 caso a letra seja e o '\0' e 0 caso contrário, então você poderia escrever for (i = 0; string[i]; i++) {...faz algo bem bacana...} Espero ter ajudado, abraços e bons estudos. Resposta longa: Vamos começar executando o código abaixo: printf ("%d\t%d\t%d\n", EOF, '\0', '\n'); Saída: -1 0 10 Bom, a associação entre EOF e '\0' faz sentido já que os dois indicam o final de algo, porem o '\n' é somente um caractere qualquer da tabela ASCII, se você procurar na tabela pelo valor 10: "Na computação, line feed é um caractere de controle que indica que uma linha deve ser acrescentada. Ele possui o código ASCII 10. " - wiki Portanto é só uma maneira de representar o "enter" do seu teclado, isso varia entre SO porem creio que o assunto foge do escopo da pergunta. Portanto já sabemos o que é o '\n', vamos adiante. Quando eu crio linhas de código como: char s[] = "Hello"; A variável "s" indica onde na memoria a minha palavra "Hello" começa, logo s é um ponteiro, porém s só me diz onde a palavra COMECA mas não onde ela acaba, portanto é necessário se ter um "caractere especial" para indicar o final de uma palavra, e o caractere escolhido foi '\0' q também é um char representado na tabela pelo numero 0, que é o mesmo valor usado para NULL. Se você fizer algo do tipo: char s[4] = "Ola"; s[3] = 'a'; printf ("%s", s); Vai perceber que a sua palavra vai mostrar mais coisas, provavelmente, do que os 4 caracteres que você reservou para s. Quanto ao EOF, acrônimo para End Of File, uma macro existente na stdio que representa o valor -1, a imagem abaixo foi tirada do site https://www.gnu.org/software/m68hc11/examples/stdio_8h-source.html que possui a implementacão das lib de c. O valor em questão é utilizado quando se trabalho com arquivo, é o indicador retornado quando funções, como fgetc(), não possuem mais informações para retornar do arquivo em questão. Seria como uma macro de controle para arquivos que já foram consumidos.
  9. você quer dizer q a entrada vai ser "01001111 01101001" e a saida vai ser "oi" ?
  10. Ola @Maria Luiza Demarco, da uma olhada no código abaixo, espero ter ajudado, qualquer coisa da um grito, abraços #include <stdio.h> #define SIZE 6 int fibo (int n) { if (!n) return 0; if (n <= 2) return 1; return fibo (n-1) + fibo (n-2); } int ehPrimo (int n) { int tmp = n; while (--n > 1) if ( !(tmp%n) ) break; if (n == 1) return 1; return 0; } void mostraMatriz (int m[SIZE][SIZE]) { int i, j; for (i = 0; i < SIZE; i++) { for (j = 0; j < SIZE; j++) printf("%02d ", m[i][j]); printf("\n"); } } int main() { int matriz[SIZE][SIZE] = {0}; int i, j, k; int tmpPrimo = 1; //Diagonal principal for (i = 0; i < SIZE; i++) matriz[i][i] = fibo (i+1); //Diagonal secundaria for (i = SIZE-1, j = 0; i >= 0; i--) { //enquanto o primo temporario não for um numero primo, continue procurando pelo proximo primo while ( !(ehPrimo (++tmpPrimo)) ) ; matriz[j++][i] = tmpPrimo; } //Pares k = 2; for (i = 0; i < SIZE; i++) for (j = i; j < SIZE; j++) if (!matriz[i][j]) { matriz[i][j] = k; k += 2; } //IMPARES k = 1; for (i = 0; i < SIZE; i++) for (j = 0; j <= i; j++) if (!matriz[i][j]) { matriz[i][j] = k; k += 2; } mostraMatriz (matriz); return 0; }
  11. #include <stdio.h> int digitosEmBaseDecimal (int n) { if (!n) return 0; int nDigitos = 1; while (n/=10) nDigitos++; return nDigitos; } void maneira1 (int n) { int size = sizeof (int) * 8 - 1;//tamanho do int vezes a quantia de bits int digBin = 0;//quantia de digitos binarios for (; size >= 0; size--) { printf("%d", (n >> size)&1); if ( ((n >> size)&1) && !digBin ) digBin = size+1; //Aparencia if ( !((size)%4) )//espaco de quatro em quatro digitos printf(" "); if ( !((size)%16) )//linha nova a cada 16 digitos printf("\n"); } printf("Possui %d digitos em decimal\n", digitosEmBaseDecimal (n)); printf("Possui %d digitos em binario\n", digBin); } void maneira2 (int n) { int v[32] = {0};//vetor que vai armazena os numeors em binarios int tmpN = n;//pra envia pro contador de digitos decimais int digBin = 0;//digitos binarios int i = 0; while (n) { v[i++] = n%2; n /= 2; } for (i = 31; i >= 0; i--) { printf ("%d", v[i]); if (v[i] && !digBin) digBin = i+1; //Aparencia if ( !((i)%4) )//espaco de quatro em quatro digitos printf(" "); if ( !(i%16) )//linha nova a cada 16 digitos printf("\n"); } printf("Possui %d digitos em decimal\n", digitosEmBaseDecimal (tmpN)); printf("Possui %d digitos em binario\n", digBin); } int main() { int n; //para encerrar pressione ctrl+c while (1) { scanf ("%d", &n); maneira2 (n); } return (0); }
  12. #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int vet[100],p,i; srand(time(NULL)); for(i=0;i<100;i++){ // aki tem q ser de 0 a 100 vet[i]=rand()%101; } int op; int max,min; float media = 0; int soma = 0; menu: printf("1- Maximo numero\n"); printf("2- Minimo numero\n"); printf("3- Soma\n"); printf("4- Media\n"); printf("5- Numeros acima da media\n"); printf("6- Pares\n"); printf("7- Impares\n"); printf("8- Sair\n"); scanf("%d",&op); switch(op){ case 1: max=vet[0]; int i; for(i=1; i < 100;i++) // não intendi porque você colocou vet[i] { if (vet[i] > max) max = vet[i]; } printf("O Numero maximo do vetor e: %d \n",max); goto menu; // não USE GOTO case 2: min=vet[0]; int c;//não é nescessario criar variaveis diferentes, podia ter reusado o 'i' for(c=1;c<100;c++) { if (vet[c] < max)//como você copiou da de cima e la é o 'i', aki ia da errado min = vet[c]; } printf("O Numero minimo do vetor e: %d \n",min); goto menu;// não USE GOTO case 3: for (i=0;i<100;i++) { soma = soma + vet[i]; // soma não é iniciada, então ela comeca com lixo de memoria printf("A soma dos numeros e: %d \n",soma); } soma = 0;//Reiniciar a soma quando acabar goto menu; // não USE GOTO case 4: for (i=0;i<100;i++)//inclui uma somatoria soma += vet[i]; media = soma/100.0;//sua media só funciona se você usar depois da SOMA, elas devem ser independentes //a divisao de um int(soma) com outro int (100), resulta em um int e você perde o decimal, transforme um deles em float printf("A media e: %.2f \n",media);// media é um float, e você ta printando com %d soma = 0; goto menu;// não USE GOTO case 5: { //essa parte você nem tentou... for (i=0;i<100;i++) soma += vet[i]; media = soma/100.0; for(i = 0, c = 0; i < 100; i++) if (vet[i] > (int)media) c++; printf("Estao %d numeros acima da media \n", c); soma = 0; media = 0; goto menu; // não USE GOTO case 6: //essa parte você também não tentou printf("Numeros Pares: \n"); for(i = 0; i < 100; i++) if(vet[i]%2==0) printf("%d \n",vet[i]); goto menu;// não USE GOTO case 7: //essa também não printf("Numeros Impares: \n"); for(i = 0; i < 100; i++) if(vet[i]%2==1) printf("%d \n",vet[i]); goto menu;// não USE GOTO case 8:break; default: printf("Valor introduzido não esta na lista\n"); goto menu;// não USE GOTO } } }
  13. assim? #include <stdio.h> void Soma(char *vec) { register int i; for(i = 1; vec[i]; i++) if(vec[i-1]-'0' > 1) { vec[i-1] = '0'; vec[i]++; } } int main() { register int i; int n; int qtdComb = 1;//quantia de combinacoes char *comb; while(1) { scanf("%d", &n); for(i = 0; i < n; i++) qtdComb <<= 1; //comb = calloc(sizeof *comb, n);//voce ate poder usar malloc ou calloc sem o stdlib, mas pode gerar erros que fogem do escopo do problema char comb[n]; comb[n] = '\0'; for(i = 0; i < n; i++) comb[i] = '0'; printf("Combinações:\n"); for(i = 0; i < qtdComb; i++) { printf("%d -> %s\t", i, comb); comb[0]++; Soma(comb); if(!((i+1)%2)) printf("\n"); } qtdComb = 1; } return (0); }
  14. Nefisto

    Ajuda com arrays

    #include <stdio.h> int main() { int n = 5; //quantia de numeros, no caso 5 int vetor[n]; int numerosAcimaDaMedia = 0; float mediaAritmetica = 0; int media = 5; int i; //Recebe os valores for(i = 0; i < n; i++) scanf("%d", &vetor[i]); //Quantos numeros estao acima da media for(i = 0; i < n; i++) if( vetor[i] > media ) numerosAcimaDaMedia++; //media aritmetica for(i = 0; i < n; i++) mediaAritmetica += vetor[i]; mediaAritmetica /= n; //printa os resultados printf("Vetor: "); for(i = 0; i < n; i++) printf("%d ", vetor[i]); printf("\n"); printf("Numeros acima da media: %d\n", numerosAcimaDaMedia); printf("Media aritmetica: %.2f\n", mediaAritmetica); return (0); }
  15. //*********PRIMEIRO PROBLEMA**********// #include <stdio.h> #include <stdlib.h> #include<string.h> ///COLOQUE RETORNO NO SEU MAIN/// /* Consideracoes: 1- um vetor de tamanho N, como "char senha[10]" é na verdade um ponteiro para um lucar na heap com 10 posisoes vezes sizeof(char); 2- A funcao strcmp() retorna 3 valores possiveis, -1 caso a palavra 1 seja menor que a palavra 2 0 caso as palavras sejam iguais 1 caso a palavra 2 seja maior que a palavra 1 */ int MyStrcmp( char *nome, char *senha ) { register int i; //vamos usar o strlen() para pegar o tamanho da string int tamanhoNome = strlen(nome); int tamanhoSenha = strlen(senha); if( tamanhoSenha != tamanhoNome )//palavras de tamanho diferente são diferentes return 0; for(i = 0; nome[i] != '\0'; i++)//caminha ate o final do nome, já que os dois tem o msmo tamanho if( nome[i] != senha[i] )//se a letra 'i' do nome for diferente da letra 'i' da senha return 0; return 1;//se nunca entra no if de cima, que dize q as palavras são iguais } int main() { //para fazer a comparacao de string, podemos criar uma funcao que faça isso, ou apenas utilizar o strcmp() da string.h, aki vamos fazer dos dois jeitos char senha[10]; char nome[10]; do { printf ("\n digite o seu primeiro nome: "); scanf ("%s", &nome); printf ("\n digite sua senha: "); scanf ("%s", &senha); if( MyStrcmp( nome, senha ) == 1 ) //se a minha funcao retornar um (quer dizer que são iguais), da o erro printf ("ERRO. Digite novamente.");//O erro tem q ser colocado dentro }while ( !strcmp( nome, senha ) ); //A partir da consideração 1, essa comparacao esta comparando duas posicoes na memoria. return (0); } //**********PROBLEMA 2*********// #include <stdio.h> #include <stdlib.h> #define CLEAN_BUFF do{ int c; while((c = getchar()) != '\n' && c != EOF);}while(0) /*Considerações * 1- scanf() com %c, pega apenas a letra que você digitou e deixa no buffer o \n(enter), nesse caso não ocorre erro, porem pegue o costume de usar um getchar() ou alguma estrutura como o define acima para limpar seu buffer. 2- Voce ta colocando virgula onde deveria ser ponto, por isso as contas dao errado, "50 * 2,5 = 100" e "50 * 2.5 = 125", e os printf estao no lugar errado */ int main () { float litros, alcool, gasolina, valorfinala, valorfinalg, descalcool, descgaso; char comb; //Entrada de dados printf ("\n Alcool ou Gasolina? Digite A - Alcool ou G - Gasolina: "); scanf ("%c", &comb); CLEAN_BUFF; printf ("\n Quantos litros você vai querer? "); scanf ("%f", &litros); //Condição para desconto Alcool e valor final if ((comb == 'A')|| (comb == 'a')) { alcool = litros * 1.90; if ( litros <= 20) { descalcool = (alcool * 0.03); valorfinala = (alcool - descalcool); }else { descalcool = (alcool * 0.05); valorfinala = (alcool - descalcool); } printf ("\n Total a pagar com desconto %.3f: ", valorfinala); } //Condição para desconto Gasolina e valor final if ((comb == 'G')|| (comb == 'g')) { gasolina = litros * 2.50; if ( litros <= 20) { descgaso = (gasolina * 0.04); valorfinalg = (gasolina - descgaso); }else { descgaso = (gasolina * 0.06); printf("%.3f\n", descgaso); valorfinalg = (gasolina - descgaso); // scanf ("%f", &valorfinalg); <<<<--- não intendi o porque disso } printf ("\n Total a pagar com desconto%.3f : ", valorfinalg); } return (0); }
  16. 1- O resultado de uma entrada de 10000 vai ser 20500, você ta fazendo custo*2 + custo*0.05, ou seja, 20000 + 500. 2- 12.000 não é 12 mil, e sim 12 com 3 casas decimais, o '.' para separar casas é uma convencao nossa. Testa agora #include<iostream> #include<cstdlib> #include<stdio.h> #include<string.h> int main () { float custo = 0.0, PF = 0.0;//inicie suas variaveis printf ("\n"); printf ("\n"); printf("Digite o preço do carro"); // O pf q tava aki no final não faz sentido printf ("\n"); printf ("\n"); scanf("%f", &custo); //Erro logico, você ta atribuindo a PF quando queria atribui a custo if (custo<=12000) PF=custo*2+custo*0.05; else if (custo<=25000) PF=custo+custo*0.10+custo*0.15; else if(custo>=25000) // << Else é uma condicao arbitraria, se outra condicao for testada precisa do if -- faltava o if -- PF=custo+custo*0.15+custo*0.20; printf("Preço Final=%.2f\n",PF); // <<< Faltava virgula return 0; system ("pause"); }
  17. cara não intendi muito bem, no caso vai te sexta q só vai te um baterista, e no domingo só vai ter um vocal. No caso só vai ter um dos musicos em cada dia? Aguardo retorno
  18. #include <stdio.h> #include <stdlib.h> #define SIZE 20 #define SWAP( a, b ) (a) ^= (b) ^= (a) ^= (b) void SelectionSortRec( int *vec, int size ) { static int n = 0; int menorV, menorI; int i; for(i = n; i < size; i++) { if( i == n ) { menorV = vec[i]; menorI = i; } if( vec[i] < menorV ) { menorV = vec[i]; menorI = i; } } if( vec[n] != menorV ) SWAP( vec[n], vec[menorI] ); n++; if( (n+1) != size ) return SelectionSortRec( vec, size ); else return; } int main() { register int i; int vec[20] = {0}; for(i = 0; i < 5; i++) vec[i] = rand() % 10; printf("Antes de ordenar\n"); for(i = 0; i < 5; i++) printf("%d ", vec[i]); printf("\n"); SelectionSortRec( vec, 5 ); printf("Depois de ordenar\n"); for(i = 0; i < 5; i++) printf("%d ", vec[i]); printf("\n"); return (0); }
  19. #include<iostream> #include<cstdlib> #include<stdio.h> #include<string.h> int main () { float custo = 0.0, PF = 0.0;//inicie suas variaveis printf ("\n"); printf ("\n"); printf("Digite o preço do carro"); // O pf q tava aki no final não faz sentido printf ("\n"); printf ("\n"); scanf("%f", &custo); //Erro logico, você ta atribuindo a PF quando queria atribui a custo if (custo<=12.000) PF=custo*2+custo*0.05; else if (custo<=25.000) PF=custo+custo*0.10+custo*0.15; else if(custo>=25.000) // << Else é uma condicao arbitraria, se outra condicao for testada precisa do if -- faltava o if -- PF=custo+custo*0.15+custo*0.20; printf("Preço Final=%.2f\n",PF); // <<< Faltava virgula return 0; system ("pause"); }
  20. @dfop02 Opa, cara foi mal a demora, provas... Aew montei agora aqui na facul então pode se que tenhas erros, ve se é isso que você queria. Espero ter ajudado #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> #define CLEAN_BUFF do{ int c; while((c = getchar()) != '\n' && c != EOF);}while(0) //substitui esse parte por getchar() se você preferir #define MAX_SENHA 6 #define MAX_LOGIN 50 int Usuario( FILE* file, char* user, char* senha ) //Verifica se é um usuario valido { char tmpLogin[MAX_LOGIN]; char tmpSenha[MAX_SENHA]; fscanf(file, "%s", tmpLogin); while( !feof(file) ) { if( !strcmp(tmpLogin, user) ) { fscanf(file, "%s", tmpSenha); if( !strcmp(tmpSenha, senha) ) return 1; } else { fscanf(file, "%*s"); } fscanf(file, "%s", tmpLogin); } return 0; } char* CriaSenha() { register int i; char* senha = (char*)malloc(sizeof *senha * MAX_SENHA); for(i = 0; i < MAX_SENHA; i++) { senha[i] = getch(); if(senha[i] == '\r') break; else printf("*"); } senha[i] = '\0'; return senha; } int main() { FILE* fpIN; int option = 0; char *user = (char*)malloc(sizeof *user * MAX_LOGIN); char *senha, *confirmaSenha; do { printf("1- Login\n2- Cadastrar\n3- Sair\n"); scanf("%d", &option); CLEAN_BUFF; switch( option ) { case 1: printf("Usuario: "); gets(user); printf("Senha: "); senha = CriaSenha(); fpIN = fopen("usuarios.txt", "a+"); printf("\nUsuario %sconfirmado.\n", Usuario(fpIN, user, senha) ? "" : "não "); fclose(fpIN); free(senha); break; case 2: printf("Usuario: "); gets(user); do { printf("Senha: "); senha = CriaSenha(); printf("\nConfirmacao de senha: "); confirmaSenha = CriaSenha(); printf("\n"); if( !strcmp(senha, confirmaSenha) ) break; else printf("As senhas não são iguais. Tente novamente.\n"); }while(1); fpIN = fopen("usuarios.txt", "a+"); fprintf(fpIN, "%s %s\n", user, senha); fclose(fpIN); free(senha); free(confirmaSenha); break; case 3: return 0; default: printf("Escolha 1, 2 ou 3...\n"); break; } }while( 1 ); return (0); }
  21. Pode a gente pode, mas você precisa mandar alguma coisa doq você já fez, ou pelo menos tento, já q a intenção é AJUDAR. E não, não é complicado de fazer =D
  22. Nefisto

    If aninhados(encadeados)

    Ola anda7x, recomendo os dois livros a seguir, são muito bons para iniciar na area: (o deitel possui mais exercicios) C: como programar (qualquer edicao) Deitel C completo e total Da uma estuda no codigo, e qualquer duvida sobre o que foi feito é só avisar: #include <stdio.h> int main() { // int prd,apto,A,a,B,b,C,c;// a variavel A é do tipo inteiro, logo sua comparacao não faz sentido int prd, apto; char blc; printf("digite o bloco,numero do predio e apartamento\n" ); scanf("%c",&blc); getchar(); scanf("%d %d", &prd, &apto); if(blc== 'a' || blc == 'A') { if(prd==0) { if(apto==100) printf("thiago alves"); else printf("stefano alves"); } else if(prd==1) { if(apto==100) printf("paulo cesar"); else printf("juliana"); } } else if(blc== 'b' || blc == 'B') { if(prd==0) { if(apto==100) printf("Maiara"); else printf("nenhum morador"); } else if(prd==1) { if(apto==100) printf("Cristian"); else printf("nenhum morador"); } } else if(blc== 'c'|| blc == 'C') { if(prd==0) { if(apto==100) printf("Uillian"); else printf("Nenhum Morador"); } else if(prd==1) { if(apto==100) printf("Danielle"); else printf("Osvaldo"); } } return (0); }
  23. Nefisto

    e

    #include <iostream> #define TAM_VETOR 4 int main() { int vetorA[TAM_VETOR], vetorB[TAM_VETOR]; int menorA, menorB, maiorA, maiorB; double mediaA = 0, mediaB = 0; printf("Insira valores de 0-10 para os vetores(separados por espaco).\n[A] [B]\n"); //Dessa forma vc verifica conforme o usuario for dando entrada // for(register int i = 0; i < TAM_VETOR; i++) // { // scanf("%d %d", &vetorA[i], &vetorB[i]); // if( i == 0 ) // { // menorA = vetorA[i]; // menorB = vetorB[i]; // maiorA = vetorA[i]; // maiorB = vetorB[i]; // }else // { // if( menorA > vetorA[i] ) // menorA = vetorA[i]; // if( menorB > vetorB[i] ) // menorB = vetorB[i]; // if( maiorA < vetorA[i] ) // maiorA = vetorA[i]; // if( maiorB < vetorB[i] ) // maiorB = vetorB[i]; // } // mediaA += vetorA[i]; // mediaB += vetorB[i]; // } // mediaA /= TAM_VETOR; // mediaB /= TAM_VETOR; // printf("VETOR A:\nMaior -> %d\tMenor -> %d\tMedia -> %.2lf\n", maiorA, menorA, mediaA); // printf("VETOR B:\nMaior -> %d\tMenor -> %d\tMedia -> %.2lf\n", maiorB, menorB, mediaB); //Podemos trabalhar com o vetor tbm for(register int i = 0; i < TAM_VETOR; i++) { scanf("%d %d", &vetorA[i], &vetorB[i]); mediaA += vetorA[i]; mediaB += vetorB[i]; } mediaA /= TAM_VETOR; mediaB /= TAM_VETOR; //BUBBLE SORT for(register int i = 0; i < TAM_VETOR-1; i++) for(register int a = i+1; a < TAM_VETOR; a++) { //Faz as trocas //PARA O A if( vetorA[i] > vetorA[a] ) { vetorA[i] ^= vetorA[a]; vetorA[a] ^= vetorA[i]; vetorA[i] ^= vetorA[a]; } //PARA O B if( vetorB[i] > vetorB[a] ) { vetorB[i] ^= vetorB[a]; vetorB[a] ^= vetorB[i]; vetorB[i] ^= vetorB[a]; } } //Depois do bubble sort, o primeiro item de cada vetor é o menor e o ultimo é o maior printf("VETOR A:\nMaior -> %d\tMenor -> %d\tMedia -> %.2lf\n", vetorA[TAM_VETOR-1], vetorA[0], mediaA); printf("VETOR B:\nMaior -> %d\tMenor -> %d\tMedia -> %.2lf\n", vetorB[TAM_VETOR-1], vetorB[0], mediaB); return (0); }
  24. #include <stdio.h> //a matriz diagonal é a linha onde i=j, onde i sao as linhas e j as colunas //Como vc pediu em uma funcao(que na real é um procedimento) vou fazer aki // void DrawMatrix() // { // int i, j;//i para linhas, y para colunas // for(i = 0; i < 3; i++) // { // for(j = 0; j < 3; j++) // { // if(i == j) // printf("1"); // else // printf("0"); // } // printf("\n"); // } // } //Ficaria mais legal se o usuario entrase com o tamanho da matrix quadrada void DrawMatrix(int tamanho) { int i, j;//i para linhas, y para colunas for(i = 0; i < tamanho; i++) { for(j = 0; j < tamanho; j++) { if(i == j) printf("1"); else printf("0"); } printf("\n"); } } int main() { int tamanho; scanf("%d", &tamanho); DrawMatrix(tamanho); return (0); }
×
×
  • Criar Novo...