Exata0mente
-
Total de itens
21 -
Registro em
-
Última visita
Posts postados por Exata0mente
-
-
Olá amigo!
O erro está no operador lógico que utilizou no if.
A função strcmp retorna um inteiro 0 quando as palavras são iguais. O erro que seu código apresenta é que se uma das condições forem satisfeita ele dá acesso. O correto é usar o operador lógico OU (||). Veja
"1 && 1 = 1" *** "1 || 1 = 1"
"1 && 0 = 0" *** "1 || 0 = 1"
"0 && 1 = 0" *** "0 || 1 = 1"
"0 && 0 = 0" *** "0 || 0 = 0"
Como a saída que diz "Acesso garantido!" é a saída else (0), se qualquer uma das condições tivesse uma ou nenhuma string correta a saída seria 0. Usando o operador lógico OU seria diferente: a única forma de o resultado ser 0 e ir para o else é se, e somente se, o retorno dos dois strcmp forem 0.
if(strcmp(login.senha, "laranja") || strcmp(login.nome, "Angelo"))
-
Pense no seguinte, a média aritmética nada mais é do que a soma de n elementos dividido por n:
media = (x1 + x2 + x3 + x4)/n
Matematicamente, esta expressão poderia ser representada por:
media = x1/n + x2/n + x3/n + x4/n.
Dado este rearranjo da expressão fica fácil você fazer um laço para calcular média. Exemplo:
int main(){ int i, n, idade[5] = {16, 18, 36, 40, 25}; float media; n = 5; media = 0; for(i = 0; i < n; i++){ media += idade[i] / (float)n; } return 0; }
Veja:
(16 + 18 + 36 + 40 + 25) / 5 => 135 / 5 = 27
16/5 + 18/5 + 36/5 + 40/5 + 25/5 => 3,2 + 3,6 + 7,2 + 8 + 5 = 27
Espero ter ajudado!
-
Olá!
Não encontrei erro em seu código. Compilei e rodei no Code:Blocks e funcionou normalmente.
Faz um teste com 3 medidas para cada sexo e posta o resultado.
-
Posta o código do que você já fez
-
Sempre que o compilador encontrar o exit(0) ele irá encerrar o programa. Coloque-o apenas quando for de fato necessário encerrar o programa (resposta errada por exemplo)
Qual livro vocês estão utilizando?
-
Olá,
Vamos ver se a lógica é essa:
- Solicita número limite para a aleatoriedade N;
- Solicita quantos elementos por linha será impresso M;
-
Imprime o vetor;
- Se a quantidade de elementos for divisível por M pule uma linha;
Me corrija se estiver errado por favor. Abaixo o código:
#include <stdio.h> #include <stdlib.h> /*Biblioteca do srand() e rand(), não as esqueça :) */ #include <time.h> #define TAM 100 /*Por convencao usar constante com letras maiusculas*/ void atribuir_valor(int vet[], int N){ /*TAM e' uma constante global, ou seja, não se faz necessario passar como argumento pois já foi definida no começo do programa*/ int i; srand(time(0)); for(i = 0; i < TAM; i++) vet[i] = rand() % N + 1; /*Apesar de não passar o tamanho do vetor como argumento para a funcao, dentro da funcao e' necessario informar a posicao de cada elemento*/ } void exibe_vetor(int vet[], int M){ /*TAM e' uma constante global, ou seja, não se faz necessario passar como argumento*/ int i; for(i = 0; i < TAM; i++){ printf("Vet[%d] = %d\t", i + 1, vet[i]); if(!((i + 1) % M)) /*Condicao para pular linha*/ printf("\n"); } } int main(){ int v[TAM], n, m; printf("Informe o limite N:\n"); scanf("%d", &n); atribuir_valor(v, n); printf("Informe a quantidade de elementos por linha \'M\'\n"); scanf("%d", &m); /*Vamos assumir que o usuario não digitara numero negativo*/ printf("O vetor e: \n"); exibe_vetor(v, m); return 0; }
-
Olá!
Tentei ser fiel ao máximo em seu código e deixá-lo bem simples, mas já adianto que não o corrigi (há alguns erros). É intuitivo os comandos então para seguir com as correções.
#include <stdio.h> int main(){ char nome[60], d, n, turdiario; int idade, diasmes, diastrabmes, horasdia; float valhrtrab, salario, inss, fgts; /*Obs: há variaveis que não foram utilizadas em seu codigo: diasmes, n, d*/ printf("Digite o nome do funcionario: "); scanf("%s", nome); printf("Digite a idade do funcionario: "); scanf("%3d", &idade); printf("Digite quantos dias trabalhados no mes: "); scanf("%2d", &diastrabmes); do{ printf("Regime de horas trabalhadas por dia. 6 ou 8 horas?: "); scanf("%2d", &horasdia); }while((horasdia != 6) || (horasdia != 8)); /*Aqui há um erro de logica, 6 é diferente de 8 e 8 é diferente de 6 portanto este laco nunca sera nunca sera satisfeito*/ printf("Digite o Turno. D para Diurno e N para Noturno ou Pressione S para Sair: "); scanf("%c", &turdiario); if((turdiario != 'D') && (turdiario != 'N')){ printf("Programa Finalizado!!"); } if((turdiario == 'D') && (idade <= 50)) valhrtrab = 3.0; else if((turdiario == 'D') && (idade > 50)) valhrtrab = 3 + 3 * 0.1; else if((turdiario == 'N') && (idade <= 50)) valhrtrab = 4; else if((turdiario = 'N') && (idade > 50)) valhrtrab = 4 + 4 * 0.1; salario = (valhrtrab * horasdia * diastrabmes) + (valhrtrab * horasdia * diastrabmes * 1.5); fgts = salario * 0.08; if (salario <= (float)1556.94) inss = salario * 0.08; else if(salario >= (float)1556.95 && salario <= (float)2594.92) inss = salario * 0.09; else if(salario >= (float)2594.93 && salario <= (float)8189.82) inss = salario * 0.11; printf("O salario bruto é: %.2f", salario); printf("\nO Total do Depósito do FGTS e: %.2f",fgts); printf("\nO depósito do INSS é: %.2f", inss); return 0; }
-
Faça uma verificação da posição da coluna.
if(col == 3) printf("\t\t");
ou
if(col == col / 2) /*Verificando se está na metade*/ printf("\t\t");
o \t é como se fosse um TAB
-
Olá, se eu não entendi os conceitos de vetor erroneamente, não é uma boa prática definir o tamanho de um vetor por meio de uma variável pois o vetor é criado em tempo de compilação (antes do programa executar) já que é necessário destinar uma faixa na memória para o vetor.
"Às vezes, a quantidade de memória a alocar só se torna conhecida durante a execução do programa. Para lidar com essa situação é preciso recorrer à alocação dinâmica de memória. A alocação dinâmica é gerenciada pelas funções malloc, realloc e free, que estão na biblioteca stdlib.(...)", este trecho retirei do site https://www.ime.usp.br/~pf/algoritmos/aulas/aloca.html
Caso não tenha aprendido alocação dinâmica (o que é o meu caso) faça um vetor de um tamanho "aceitável" e no for determine o limite. Por exemplo:
#include <stdio.h> #define MAX_T 50 int main(){ int X, Y, i, j; int matriz[MAX_T][MAX_T]; printf("X: "); scanf("%d",&X); /*Linha*/ printf("Y: "); scanf("%d",&Y); /*Coluna*/ printf("\n"); for(i = 0; i < X; i++) /*Usando X como limite para linha (assuminto que X será menor que MAX_T, você pode validar antes*/ for(j = 0; j < Y; j++) /*Usando Y como limite para linha (assuminto que X será menor que MAX_T, você pode validar antes*/ /*Preenchimento da Matriz*/ return 0; }
Se falei alguma besteira me corrijam por favor :S
-
A tabela pode ser feita com matriz (vetor bidimensional). O define não está fazendo sentido no contexto que nos passou. Teria o enunciado do problema completo?
-
Olha, se eu não entendi errado, o exercício 1 é muito simples e precisa apenas de dois números dados pelo usuário e não um laço:
#include <stdio.h> #include <stdlib.h> /*Tipo void, pois as impressoes sairao direto das funcoes*/ void soma(int, int); void subtracao(int, int); void multiplicacao(int, int); void divisao(int, int); int main(){ int a, b; /*duas variaveis conforme o enunciado*/ printf("Digite dois numeros separados por espaco: "); scanf("%d%d", &a, &b); soma(a, b); subtracao(a, b); multiplicacao(a, b); divisao(a, b); return 0; } void soma(int num1, int num2){ printf("\n%d + %d = %d", num1, num2, num1 + num2); } void subtracao(int num1, int num2){ printf("\n%d - %d = %d", num1, num2, num1 - num2); } void multiplicacao(int num1, int num2){ printf("\n%d x %d = %d", num1, num2, num1 * num2); } void divisao(int num1, int num2){ printf("\n%d / %d = %.1f", num1, num2, (float)num1 / num2); }
O exercício 2 é mais simples ainda pois pede apenas uma operação
#include <stdio.h> void soma(int, int); int main(){ int a, b; printf("Digite dois valores separados por espaco: "); scanf("%d%d", &a, &b); soma(a, b); return 0; } void soma(int num1, int num2){ int soma; /*Apenas para não jogar a conta direto no printf*/ soma = num1 + num2; printf("\n%d + %d = %d", num1, num2, soma); }
Caso eu tenha entendido errado peço desculpas :)
-
Cara, eu sou seu fã!
-
Poxa! Vivendo e aprendendo.
Conforme citado no link, essas coisas não são ensinadas em aula. Obrigado! mais uma para o caderninho.
Então basta retirar o __fpurge(stdin); e adicionar um espaço antes do ("%4[\n] que funciona.
-
Bom dia!
@vangodp, você tem total razão. Fui pesquisar um pouco mais sobre o gets() e é de fato um limitadissímo!
Em 12/11/2016 at 01:05, vangodp disse:Posso lhe dar uns quantos motivos para nunca usar gets mas o principal é que ele pode ler um string de qualquer tamanho, a conseqüência é pode ler textos inclusive maior que seu string.
O erro que está ocorrendo é que você esta tratando uma string como se fosse um char quando você usa scanf troque scanf("%80[^\n]",&nome);
por
scanf("%80[^\n]", nome); //sem &
você não deve por & adiante de ponteiros e strings. Um string nada mais é que um ponteiro que aponta para a posição numero 1 da sua seqüencia de caracteres, então ponteiros e strings guardam relação, por isso você não deve por & adiante de ponteiros e strings, lembre disso.@luisg5, lembre-se sempre que o nome de um vetor, é o "endereço" do primeiro elemento deste vetor, logo, não precisaria do & para indicar o endereço do vetor.
Porém, caso você rode seu código fazendo apenas esta modificação, notará que o printf() retornará apenas a string nome.
Acontece que o ENTER que você deu no primeiro scanf() não foi associado à string nome e acabou indo para o buffer. Quando o scanf() para a string contacorrente é chamado, primeiro analisa o buffer, que tem um "\n" o que encerraria a leitura da string contacorrente.
Para resolver isto, será necessário a limpeza do buffer antes de ler a string contacorrente
#include<stdio.h> #include<stdlib.h> int main(){ char nome[81], contacorrente[5]; int val; printf("Informe seu nome: "); scanf("%80[^\n]", nome); __fpurge(stdin); /*Para windows use fflush(stdin)*/ printf("Informe a conta corrente: "); scanf("%4[^\n]", contacorrente); val = atoi(contacorrente); printf("Seu nome e: %s\n", nome); printf("A conta e: %d", val); return 0; }
Caso queira ver mais:
https://www.vivaolinux.com.br/artigo/Parametros-interessantes-do-scanf-e-do-printf-em-C?pagina=2
http://www.cprogressivo.net/2012/12/Buffer--o-que-e-como-limpar-e-as-funcoes-fflush-e-fpurge.html -
Olá, acho que não responderei sua pergunta mas, será que, alternativamente, a função gets() não poderia lhe ajudar?
#include<stdio.h> #include<stdlib.h> int main() { char nome[81], contacorrente[5]; int val; printf("Informe seu nome:\n"); gets(nome); printf("Informe a conta corrente:\n"); gets(contacorrente); val = atoi(contacorrente); printf("Seu nome e: %s\n", nome); printf("A conta e: %d", val); return 0; }
-
Ótimo!
Eu até que estava no rumo certo, rs. Muito obrigado!
-
Bom dia!
Estou tendo uma baita dor de cabeça com esse exercício:
"Escreva uma macro que encontre o maior entre seus três argumentos."
O maior problema é que essa verificação, segundo o enunciado, deve ser nos três argumentos da macro.
#include <stdio.h> #define MAIOR(a, b, c) printf("%d %d %d", (a > b && b > c ? a, b, c : \ (a > c && c > b ? a, c, b : \ (b > a && a > c ? b, a, c : \ (b > c && c > a ? b, c, a : \ (c > b && b > a ? c, b, a : \ c, a, b)))))) int main(){ int num1, num2, num3; scanf("%d%d%d", &num1, &num2, &num3); MAIOR(num1, num2, num3); return 0; }
-
Olá!
O seu vetor é do tipo char. Vetor deste tipo recebe caracteres únicos. Estes caracteres são representados por aspas simples. No seu caso o compilador está entendendo que você está associado variáveis A, B, C e D. Para corrigir este problema, use aspas simples em cada caractere que roda.
Recomendo no final do programa utilizar o return ou usar a função main como void.
Obs.: O erro que informou foi apresentado pelo compilador. É importante sempre analisar os erros que o compilador retorna.
Forte abraço e bons estudos!
-
Olá!
Este enunciado realmente gera muita dúvida. Meu código simplificado em C ficou assim:
#include<stdio.h> int main(){ float quant_p1, quant_p2, valor_premio, prop_p1, prop_p2; /*Entrada de dados*/ printf("Digite a quantia do apostador 1: "); scanf("%f", &quant_p1); printf("Digite a quantia do apostador 2: "); scanf("%f", &quant_p2); printf("Digite o valor do premio: "); scanf("%f", &valor_premio); /*Processamento dos dados*/ prop_p1 = quant_p1 / (quant_p1 + quant_p2); prop_p2 = quant_p2 / (quant_p1 + quant_p2); /*Saida dos dados*/ printf("\nO apostador 1 ganhou: %.2f\nO apostador 2 ganhou: %.2f", valor_premio * prop_p1, valor_premio * prop_p2); return 0; }
Fiz também um vídeo explicando a parte matemática deste código, pois seu "maior problema" é apenas a interpretação matemática do exercício:
-
Olá!
Este livro é excelente. Aborda diversos conceitos e tem bastante exemplos e exercícios.
Tenho um canal que tem as respostas comentadas deste livro. Recomendo que dê uma passada lá :)
Já há respostas do Capítulo 1, 2 e 3. Estou trabalhando fortemente nos capítulos restantes:
programa
em C, C++
Postado
Você chegou a escrever algum código?