Ir para conteúdo
Fórum Script Brasil

Hazzu

Membros
  • Total de itens

    80
  • Registro em

  • Última visita

Tudo que Hazzu postou

  1. O seu problema está relacionado com lixo deixado no buffer do teclado após A quebra de linha não é lida e permanece no buffer, sendo capturada em O que faz o programa prosseguir sem solicitar entrada de dados do usuários. Diante disto, se faz necessária a limpeza do buffer. Leia mais sobre buffer e como limpá-lo nessa publicação. Organizei seu código e agora está funcionando. Qualquer dúvida, pergunte. //Importações de bibliotecas #include <stdio.h> #include <stdlib.h> /*Problema: Em uma eleição para governador concorrem 4 candidatos (1, 2, 3 e 4). No dia da eleição cada um dos N eleitores votaram: • 1, 2, 3 ou 4 para cada candidato. • 0 (zero) para voto em branco. • -1 para voto nulo. Considere que: • O candidato ganha a eleição se fizer 51% ou mais do total de votos. • Se não houver ganhador, os dois melhores irão para o segundo turno. Faça um programa em C que calcule e imprima: • O candidato vencedor (se houver), seguido da porcentagem de votos obtida. Se não houver vencedor, imprima os candidatos que irão ao segundo turno com a respectiva porcentagem de votos obtida. • A porcentagem obtida pelos demais candidatos. • A porcentagem de votos em branco e nulos.*/ #define TAM 6 //Defina constantes para facilitar posterior adaptação //Estruturas typedef struct{ int id; char nome[20]; int votos; float percentual; } Cand; //Função principal int main(){ //Declaração de variáveis int voto=0, total=0, i, j, invalido; char continuar; Cand candidatos[TAM] = {{1, "Tiago", 0, 0}, {2, "Pedro", 0, 0}, {3, "Alvaro", 0, 0}, {4, "Chaves", 0, 0}, {0, "Branco", 0, 0}, {-1, "Nulo", 0, 0}}; Cand aux; //Apresentação printf("------------------------------\n"); printf(" Urna eleitoral \n"); for (i=0; i<TAM; i++) printf("%d - %s\n", candidatos[i].id, candidatos[i].nome); printf("------------------------------\n"); //Votação do{ do{ invalido = 1; //True printf("Digite o voto:\n"); scanf("%i", &voto); for (i=0; i<TAM; i++){ if (candidatos[i].id == voto){ invalido = 0; //False; candidatos[i].votos++; break; } } if (invalido) printf("~Opcao invalida! Tente novamente.\n"); else printf("Voto contabilizado com sucesso!\n"); } while (invalido); printf("Deseja realizar outro voto?[S/N]\n"); fflush(stdin); //Linpando Buffer continuar = getchar(); } while (continuar=='S' || continuar=='s'); //Apuração for (i=1; i<TAM; i++){ //Ordenação decrescente pelo método da inserção aux = candidatos[i]; for (j = i-1; j>=0 && candidatos[j].votos < aux.votos; j--) candidatos[j+1] = candidatos[j]; candidatos[j+1] = aux; } for (i=0; i<TAM; i++) total += candidatos[i].votos; //Soma dos votos for (i=0; i<TAM; i++) candidatos[i].percentual = (float) candidatos[i].votos/total; //Calculando percentuais //Exibição de resultados printf("------------------------------\n"); printf(" Resultado \n"); for (i=0; i<TAM; i++) printf("%s: %d votos (%.2f%%)\n", candidatos[i].nome, candidatos[i].votos, candidatos[i].percentual*100); if (candidatos[0].percentual >= 0.51) printf("---->>> %s venceu a eleicao <<<----\n", candidatos[0].nome); else printf("> Segundo turno entre %s e %s.", candidatos[0].nome, candidatos[1].nome); return 0; }
  2. Atente que o recuo horizontal é função unicamente da coluna, sendo 0 para a primeiro coluna (c=0) e máximo para a última coluna (c=3). Então: Deverá ser: if (opcao == 3){ for (l = 0; l < 4; l++){ for (c = 0; c < 4; c++){ if (l + c == 3){ //imprimindo recuo for (s=0; s<c; s++) printf(" "); //desta vez coloquei 3 espaços //imprimindo numero; printf("%d\n",mat[l][c]); } } } }
  3. Hazzu

    Ficheiros

    Seria um arquivo zip?
  4. Hazzu

    Ficheiros

    Não entendi sua pergunta. Para ler um arquivo qualquer, basta informar seu endereço ao fopen.
  5. Mudar para: if (opcao == 2){ for (l = 0; l < 4; l++){ //Imprimindo espaçamento for (s=0; s<l; s++) printf(" "); //Neste caso coloquei 2 espaços, mas você pode ajustar para ficar compativel com o espaçamento entre linhas //Imprimindo número printf ("%d\n", mat[l][l]); } cout << "\n"; }
  6. Exatamente. A ideia é escrever espaços para deslocar os números e alinha-los diagonalmente. Para o primeiro número, 0 espaços, para o segundo, 1 espaço, para o terceiro, 2 espaços. Note que acaba sendo o índice da coluna daquele número a quantidade de espaços necessários antes dele. Você também pode adotar um espaçamento maior, como 2 espaços a cada linha, de forma a compatibilizar melhor o espaçamento vertical e horizontal.
  7. Provavelmente é o velho problema da função scanf para ler caracteres e strings. A quebra de linha deixada na leitura de B ficar armazenada no buffer e é inserida para C. Alguns indicam colocar um espaço como você fez, para contornar esse problema, mas para mim nunca funcionou. Aconselho o uso da função fgets e pesquise na internet sobre como limpar o buffer do teclado (stdin).
  8. Nesse caso x tem que ser uma variável, não um valor. Note que no seu caso, a variável é letra, e 'x' apenas um valor dela. Você pode fazer assim: #include <stdio.h> int main (){ int numero1 =5 ; float numero2 =4.5 ; float x=666.5; float somadeTodos; printf("Numero 1: %i", numero1); printf("\nNumero 2: %f", numero2); printf("\nValor de x: %f", x); somadeTodos = numero1+numero2+x; printf("\nSoma: %f\n", somadeTodos); return 0; } Mas parece que você quer transformar programação em notação matemática. Em programação 148,8x será uma string, não uma operação. Se você quiser mesmo assim gerar uma string dessa forma, pode usar a função sprintf: #include <stdio.h> int main (){ int numero1 =5 ; float numero2 =4.5 ; char letra='x'; char expressao[20]; printf("Numero 1: %i", numero1); printf("\nNumero 2: %f", numero2); printf("\nLetra: %c", letra); sprintf(expressao, "%.2f+%c", numero1+numero2, letra); //.2f é para imprimir com apenas 2 casas decimais printf("\nExpressão: %s\n",expressao); return 0; }
  9. O que você quer? Uma string 123123x ou um resultado inteiro, considerando o caractere com seu código ASCII? O correto é somadeTodos = numero1+numero2+letra; Como você declarou somadeTodos como inteiro, o resultado da soma será inteiro. Para isto, C vai converter o numero float em inteiro e o caractere x também (x equivale a 120 na tabela ASCII). Desta o cálculo será 123+123+120=366. #include <stdio.h> int main (){ int numero1 =123 ; float numero2 =123 ; char letra= 'x'; int somadeTodos; printf("Numero 1: %i\n", numero1); printf("Numero 2: %i\n", numero2); printf("Letra: %c\n", letra); somadeTodos = numero1+numero2+letra; printf("Soma: %i\n",somadeTodos); return 0; }
  10. Hazzu

    Cardápio em C

    Dei uma consertada nesse seu código e implementei a ideia que te falei. Também seria uma alternativa ao uso de ponteiros retornar o preço para a função pricipal, fazendo funções do tipo float controlador(bebida). Leia as observações que eu fiz e se tiver alguma duvida pergunte. Além disso, continue desenvolvendo o código, ele necessita de melhorias. //Cabeçalhos #include <stdio.h> #include <stdlib.h> #include <locale.h> //Assinatura das funções. É melhor colocar a somente a assinatura no início, evitando problemas de sintaxe e melhorando o sequenciamento do codigo void entrada (); int menu (); void controladorapizza (float * preço); void controladorabebida (float * preço); //Função principal int main(){ int op; float precototal=0; //É melhor que o preço seja do tipo real, pois eventualmente você pode querer colocar produtos com preços envolvendo centavos //Você comente isso kkk setlocale(LC_ALL,""); //Apresentação do programa entrada(); do{ op = menu(); switch(op){ case 1: controladorapizza(&precototal); //Passando o endereço do preço total, para que posso ser alterado na função break; case 2: controladorabebida(&precototal); break; } }while(op != 3 ); //Encerrando o programa e imprimindo o custo dos produtos printf("\n----------------------------------------\nCusto total dos produtos: %.2f\n----------------------------------------\n", precototal); return 0; } void entrada (){ printf ("*************************************\n"); printf ("**** Bem Vindo ****\n"); printf ("**** A ****\n"); printf ("**** UNIPIZZA ****\n"); printf ("*************************************\n"); } int menu (){ int op; printf (" \nCardapio \n\n"); printf ("1 - Pizzas. \n"); printf ("2 - Bebidas. \n"); printf ("3 - Finalizar o pedido.\n"); printf ("Digite a opção desejada: \n"); scanf("%d", &op); return op; } void controladorapizza (float * preço) { //preço é um ponteiro que apontará para a variavel cujo o endereço seja passado, no caso precototal da função int main int oppizza; printf ("\n1 - Pizza Mussarela - 18,00 R$ \n"); printf ("2 - Pizza Calabresa - 18,00 R$ \n"); printf ("3 - Pizza Franco com Catupiry - 18,00 R$ \n"); printf ("4 - Pizza Quatro Queijos - 22,00 R$ \n"); printf ("5 - Pizza Portuguesa - 22,00 R$ \n"); printf ("Digite a opção desejada: \n"); scanf ("%d", &oppizza); switch (oppizza){ case 1: printf ("\nVocê adicionou pizza de Mussarela a sua bandeja!\n"); *preço += 18; //Acrescentando produto no preço break; case 2: printf ("\nVocê adicionou pizza de Calabresa a sua bandeja!\n"); *preço += 18; break; case 3: printf ("\nVocê adicionou pizza de Pizza Franco com Catupiry a sua bandeja!\n"); *preço += 18; break; case 4: printf ("\nVocê adicionou pizza de Quatro Queijos a sua bandeja!\n"); *preço += 22; break; case 5: printf ("\nVocê adicionou pizza de Portuguesa a sua bandeja!\n"); *preço += 22; break; default: printf ("\nValor incorreto, tente novamente\n"); break; } } void controladorabebida (float * preço) { int opbebida; char str [20]; printf ("\n1 - Suco - 5,00 R$ \n"); printf ("2 - Refrigerante Lata - 4,00 R$\n"); printf ("3 - Refrigerante 2L - 13,00 R$\n"); printf ("Digite a opção desejada:"); scanf ("%d", &opbebida); switch (opbebida){ case 1: printf ("\nInforme o sabor do suco: \n"); scanf ("%s", str); //Não é &str, pois str já é um ponteiro, um endereço de memória printf ("\nVocê adicionou suco de %s a sua bandeja!\n", str); *preço += 5; break; case 2: printf ("\nInforme o refrigerante lata: "); scanf ("%s", str); printf ("\nVocê adicionou %s lata a sua bandeja!\n", str); *preço += 4; break; case 3: printf ("\nInforme o refrigerante 2 Litros: "); scanf ("%s", str); printf ("\nVocê adicionou %s 2 Litros a sua bandeja!\n", str); *preço += 13; break; default: printf ("\nComando incorreto, tente novamente\n"); break; } } kkkk Depois de enviar minha resposta que eu vi. Aproveite para comparar
  11. Quando você executa o programa, ele inicia na função main() (função principal). Se você não chamar a funcão primofunção() dentro da main(), ela jamais será executada, pois o programa é encerrado ao atingir o return da main.
  12. A biblioteca math.h tem a função pow(numero, potencia). Mas imagino que você tem que implementar uma função do zero. //Função para calcular a potência de um número int pot(numero, expoente){ int i, resultado=1; //resultado começa com 1 para caso expoente=0, não entrara no laço e retornará 1 for (i=1; i<=expoente; i++){ resultado *= numero; //resultado é multiplicado pelo numero } return resultado;
  13. Hazzu

    Cardápio em C

    Agora não estou no computador, mas vou te passar a ideia. Crie uma variável precototal na função principal e passe o endereço dela (&precototal) para as funções secundárias (esse valor será recebido por um ponteiro, float *preço, por exemplo). Desta forma, você poderá adicionar produtos ao preço total nas funções fazendo *preço+=precoproduto (o valor apontado por preço é acrescido do valor do produto)
  14. #include <stdio.h> #include <stdlib.h> int main(){ int n, maior, menor, first; first = 1; //Verdadeiro while (1){ printf("Insira um valor (0 para sair): "); scanf("%d", &n); if (!n) break; //Encerrar o laço quando n=0 -> n=falso -> !n=verdadeiro if (first){ maior = n; //Inicializando as variaves com o primeiro valor digitado, visto que não temos ideia do intervalo de valores que o usuários ira inserir menor = n; first=0; //Falso } else{ if (n>maior) maior = n; //Comparação if (n<menor) menor=n ; } } printf("Menor numero: %d\nMaior numero: %d\n", menor, maior); //Impressão de resultados return 0; } Bom, não é mencionado que os números serão todos naturais.
  15. Não sei o que você quer fazer com esses valores. Da forma que está aí ele vai ler 12 valores da primeira linha, inclusive o ano. Também você não mostrou todo o código. Aparentemente você vai ler as temperaturas de um ano e retornar algumas estatísticas sobre esses valores. Enfim, não há como saber. Com relação a sintaxe, É necessário informar o arquivo de leitura: fscanf(arqresp, "%f", &vet[i]); /*essa é a parte que esta errada e não sei como arrumar*/ Note também que numa linha existem 13 valores, pois o primeiro equivale ao ano. Então, for (i = 0; i < 12; i++) { fscanf("%f", &vet[i]); /*essa é a parte que esta errada e não sei como arrumar*/ } Ficará: for (i = 0; i < 13; i++) { fscanf("%f", &vet[i]); /*essa é a parte que esta errada e não sei como arrumar*/ } Sendo o primeiro valor do vetor o ano correspondente.
  16. A sua quebra de linha é no final da frase. Por outro lado, não há quebra de linha no final do segundo printf e nem no começo do terceiro, ficando ambos na mesma linha.
  17. Chama no discord gata Hazzu#2853
  18. Você simplesmente declara a variável option e não faz a leitura desta antes do switch. Dessa forma option poderá ter qualquer valor advindo de lixo da memória, tendendo a cair na opção inválida. OBS.: Quando for enviar seu código utilize a ferramenta de inserção de código.
  19. Bom se quiser que alguém faça para você, comece a abrir a carteira. Mas se quiser tentar, poderemos te ajudar com as dúvidas que surgirem.
  20. 1) Ao enviar um código em uma postagem utilize a ferramenta para inserir código no texto (4° ferramenta do cabeçalho). 2) A sua variável div deve ser zerada a cada novo número testado. Da forma que está ai, se a pessoa digita inicialmente 4, após o for, div ficará com valor 3 e quando a pessoa digitar o segundo número, div continuará a partir de 3. 3) O teste de primo a partir da quantidade de divisores (div == 2) deve ser efetuada fora do for, visto que para números compostos div também vai assumir valor 2 em algum momento, porém finalizará maior. 4) Utilize algumas quebras de linhas para melhorar a interface do seu código. Código corrigido: #include <stdio.h> int main () { int n,soma,i,div; n = 1; soma = 0; while (n != 0) { div = 0; //zerando variável div a cada novo teste printf("Digite valor maior que 0 (Digite 0 para finalizar):\n"); scanf("%d", &n); for (i = 1; i <= n; i++) { if (n%i == 0) { div = div + 1; } } if (div == 2) { soma = soma + n; } } printf("Soma dos primos: %d\n", soma); return 0; } 5) Extra. A estrutura de repetição do se encaixa melhor nesse laço, visto que de qualquer forma ele será executado ao menos uma vez. Você também pode colocar as instruções fora do laço para deixar a tela do programa mais limpa. #include <stdio.h> int main () { int i, n, soma=0, div; printf("Ola, esse programa calcula a soma de numeros primos digitados.\n"); printf("Digite um numero natural (0 para finalizar):\n"); do { div = 0; //zerando variável div a cada novo teste scanf("%d", &n); for (i = 1; i <= n; i++) { if (n%i == 0) { div += 1; //O operador += resume div = div +1 } } if (div == 2) { soma += n; } } while(n != 0); printf("Soma dos primos: %d\n", soma); return 0; }
  21. Hazzu

    cadastro de petshop

    1) Contantes definidas com o #define devem ter nome único. Na função buscar você utilizou o nome "limite" para uma variável. 2) Para facilitar na nomenclatura, use o typedef para renomear sua estrutura. 3) +alguns erros de operadores com ponteiros: if (strcmp(cadastro[contador]->nome, nome_pesquisa) == 0) { retorno = cadastro[contador]; Mudar para: if (strcmp(cadastro[contador].nome, nome_pesquisa) == 0) { *retorno = cadastro[contador]; Eu consertei seu código e rodei ele. Vi que possui alguns bugs. Continue o seu trabalho 🙂 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> #include <string.h> #define LIMITE 4 typedef struct Animal{ char nome[15]; int idade; int registro; char cor[15]; char raca[15]; bool vacinado; } Animal; Animal* cria_cadastro(int tamanho); void limpar_buffer(void); void cadastrar(Animal* cadastro, int tamanho); Animal* buscar(Animal* cadastro, int lim); int main(int argc, char* argv[]){ Animal* cadastro; char escolha = '0'; Animal* objeto_da_busca; cadastro = cria_cadastro(LIMITE); do { printf("[1] - Cadastrar\n"); printf("[2] - Procurar\n"); printf("[3] - Encerrar Programa\n\n\n"); printf("Sua escolha? "); escolha = getchar(); switch (escolha) { case '1': cadastrar(cadastro, LIMITE); break; case '2': if ((objeto_da_busca = buscar(cadastro, LIMITE)) != NULL) { printf("Nome: %s\n", objeto_da_busca->nome); printf("Idade: %d\n", objeto_da_busca->idade); printf("Cor: %s\n", objeto_da_busca->cor); printf("Raça: %s\n", objeto_da_busca->raca); printf("Registro: %d\n", objeto_da_busca->registro); if (objeto_da_busca->vacinado == true) { printf("Vacinado: sim\n"); }else{ printf("Vacinado: não\n"); } }else{ printf("Animal não cadastrado.\n"); } break; case '3': printf("Encerrando o programa."); break; default: printf("Opção inválida.Tente novamente.\n"); } } while (escolha != '3'); return 0; } Animal* cria_cadastro(int tamanho){ Animal* cadastro; cadastro = (Animal*)malloc(sizeof(Animal) * tamanho); return cadastro; } void limpar_buffer(void){ char c; while((c = getchar()) != '\n' && c != EOF){}; } void cadastrar(Animal* cadastro, int tamanho){ int contador = 0; static int rg; char continuar; do { system("clear"); printf("Cadastro de Animal\n\n"); printf("Nome: "); fgets(cadastro[contador].nome, 15, stdin); printf("Idade: "); scanf("%d", &(cadastro[contador].idade)); limpar_buffer(); printf("Cor: "); fgets(cadastro[contador].cor, 15, stdin); printf("Raça: "); fgets(cadastro[contador].raca, 15, stdin); cadastro[contador].registro = rg++; contador++; printf("\n\n\n\ncadastrar outro animal? "); continuar = getchar(); } while (contador < tamanho && (continuar != 'n' && continuar != 'N')); } Animal* buscar(Animal* cadastro, int lim){ char nome_pesquisa[15]; int contador; Animal* retorno = NULL; system("clear"); printf("Busca de Animal\n\n"); printf("Nome Animal: "); fgets(nome_pesquisa, 15, stdin); for (contador = 0; contador < lim; contador++) { if (strcmp(cadastro[contador].nome, nome_pesquisa) == 0) { *retorno = cadastro[contador]; } } return retorno; }
  22. Atenção para a correta indentação do código, facilita a compreensão. #include <stdio.h> int main(void){ typedef struct dd{ //Definindo estrutura char *n[100]; //Em C os vetores tem tamanho definido na declaração, a não ser que você utilize ponteiros e alocação dinâmica } dd; //Nome do tipo da estrutura, redefinida pelo typedef, a fim de tornar o nome mais curto, desta forma podemos representar a estrutura usando apenas seu sinônimo "dd". dd hazzu; //Declarando uma variável do tipo dd printf("Nome: \n"); scanf("%[^\n]s%*c", &hazzu.n); printf("Seu nome e: %s\n", hazzu.n); return 0; }
  23. Hazzu

    Exeercício

    Olha, tente fazer e se não conseguir, tire suas dúvidas aqui. Mas se você quiser que alguém faça para você, abra a carteira em vem no meu discord: Hazzu#2853
  24. Hazzu

    Dúvida sobre comando if

    || significa "ou" && que significa "e". ... Abaixo está o código corrigido, compare com o seu. #include <stdio.h> #include <stdlib.h> int main(){ float v_altura,v_peso,v_imc; printf("\n\nEste e um programa para medir seu IMC, vamos la ?\n\n"); printf("Primeiro insira a sua altura EX: 1.80.\n\n"); scanf("%f",&v_altura); printf("\n\nOtimo, agora insira seu peso EX: 78,6.\n\n"); scanf("%f",&v_peso); printf("\n\nCalculando..\n\n"); v_imc=v_peso/(v_altura*v_altura); printf("Prontinho, seu IMC e de: %.2f\n\n\n",v_imc); printf("Tabela IMC:\n\nAbaixo de 17 \tMuito abaixo do peso\nEntre 17 e 18,49 \tAbaixo do peso\nEntre 18,5 e 24,99 \tPeso normal\nEntre 25 e 29,99 \tAcima do peso\nEntre 30 e 34,99 \tObesidade I\nEntre 35 e 39,99 \tObesidade II (severa)\nAcima de 40 \tObesidade III (morbida)\n\n\n"); if (v_imc < 17){ printf("\n\nVoce esta muito abaixo do peso, contate um profissional de nutricao.\n\n"); } else if (v_imc < 18.5){ //Se chegou aqui, é porque IMC>=17, então não precisa testar isso novamente printf("\n\nVoce esta abaixo do peso ideal, contate um profissional de nutricao.\n\n"); } else if (v_imc < 25){ //Se chegou aqui, é porque IMC>=18.5, então não precisa testar isso novamente printf("\n\nVoce esta no peso normal para sua altura.\n\n"); } else if (v_imc < 30){ printf("\n\nVoce esta acima do peso, contate um profissional de nutricao.\n\n"); } else { //Se chegou até aqui, não caiu em nenhum anterior, e portanto IMC>=30 printf("\n\nVoce esta muito acima do peso, contate um profissional de nutricao.\n\n"); } system("pause"); return 0; }
×
×
  • Criar Novo...