Questão 0, 1, 2 e 3:
Programa que calculas raízes de equação do segundo grau, até as complexas, em C
As questões 0, 1, 2 e 3 vão ensinar você a construir,
passo a passo, um programa que recebe os coeficientes de uma equação do 2º
grau, e devolver as raízes dele.
As funções que checam se um número é positivo, se é nulo
e que retornam o valor delta são óbvias e você deve entender facilmente como
fazer.
Vamos declarar os coeficientes como float, bem como as
raízes, para que nossa aplicação seja mais flexível e aceite números decimais.
Como de praxe, vamos criar um laço DO WHILE para saber se
o usuário desejar rodar o programa novamente, para calcular as raízes de uma
nova equação. Como de costume, também usaremos uma variável inteira ‘continuar’ para o usuário escolher se
vai querer continuar no programa ou não.
A primeira coisa que fazemos dentro do DO WHILE é pedir
ao usuário os valores dos coeficientes.
Agora vamos a parte matemática da questão.
Para ser uma equação do segundo grau é necessário que o
coeficiente de x² seja diferente de
0, no caso, é o nosso ‘a’.
Vamos criar um teste condicional do tipo IF ELSE e a
função nulo() que criamos, para saber
se esse coeficiente é 0 ou não.
Se for, a função nulo()
retorna 1 e nossa aplicação é encerrada, pois não podemos calcular as raízes
nesse caso.
Caso não seja nulo, a função nulo() retorna 0 e nosso teste cai no ELSE.
Ok, dentro do ELSE vamos checar se o delta é maior/igual
a 0, pois se for, as raízes da equação serão reais.
Nesse caso, simplesmente aplicamos a fórmula de Bháskara.
Porém, vamos necessitar calcular uma raiz quadrada. Isso
pode ser feito pela função sqrt() (de
square root), que está na biblioteca math.h, por isso adicionamos ela no
início.
Se o delta for menor que 0, as raízes serão imaginárias e
serão da forma: x + i.y, onde i é conhecido como número imaginário, x é a parte real e y é a parte imaginária.
Lembre-se que você não pode calcular a raiz quadrada de
um número negativo, por isso vamos multiplicar o delta por -1 para então tirar
a raiz quadrada do delta.
Assim, imprimimos os números complexos dividindo a parte
real da imaginária.
Esse programinha em C é bem útil, e com certeza você tem
um irmão mais novo ou vizinho que irá adorar ter esse programa.
4. Crie uma função em linguagem C que receba 2 números e retorne o maior valor.
5. Crie uma função em linguagem C que receba 2 números e retorne o menor valor.
6. Crie uma função em linguagem C que receba 3 números e retorne o maior valor, use a função da questão 4.
7. Crie uma função em linguagem C que receba 3 números e retorne o menor valor, use a função da questão 5.
8. Crie uma função em linguagem C chamado Dado() que retorna, através de sorteio, um número de 1 até 6.
9. Use a função da questão passado e lance o dado 1 milhão de vezes. Conte quantas vezes cada número saiu.
A probabilidade deu certo? Ou seja, a porcentagem dos números foi parecida?
Vamos criar 6 variáveis do tipo inteiro para armazenar quantos vezes cada um dos números do dado foi sorteado (não esqueça de inicializar elas com 0).
A seguir, faça um looping de 1 milhão de iterações.
A cada iteração, use um teste condicional para saber que número foi gerado pela função dado(), e incremente a variável correspondente.
Ao final do laço você saberá quantas vezes cada número foi sorteado. Divida por 1 milhão para saber a parcela que cada número apareceu, ou multiplique por 100 depois para obter a porcentagem.
O resultado deve ser algo bem 'justo', com cerca de 16,7% de aparição para cada face do dado.
|
|
12 comentários:
Oi, muito legal seu curso de C, bem facil de entender.. bacana.
Bom sobre as questões 6 e 7 não seria mais elegante uma solução deste tipo? Ou não é aconselhável?
Abraços
float maior2(float num1, float num2)
{
if(num1>num2)
return num1;
else
return num2;
}
float maior3(float num1, float num2, float num3)
{
return maior2(maior2(num1, num2),num3);
}
Olá Jorge, obrigado por sua contribuição! Muito boa sua solução.
Programação é isso aí cara, não tem uma única solução, vai da criatividade de cada um :)
Preciso de ajuda com uns exercicios em C. Alguem aqui?
meu email: m.vantrier23@outlook.com
Qual a resolução deste exercicio?
10. Crie um aplicativo de conversão entre as temperaturas Celsius e Farenheit.
Primeiro o usuário deve escolher se vai entrar com a temperatura em Célsius ou Farenheit, depois a conversão escolhida é realizada através de um comando SWITCH.
Se C é a temperatura em Célsius e F em farenheit, as fórmulas de conversão são:
C= 5.(F-32)/9
F= (9.C/5) + 32
Qual a resolução deste exercicio?
10. Crie um aplicativo de conversão entre as temperaturas Celsius e Farenheit.
Primeiro o usuário deve escolher se vai entrar com a temperatura em Célsius ou Farenheit, depois a conversão escolhida é realizada através de um comando SWITCH.
Se C é a temperatura em Célsius e F em farenheit, as fórmulas de conversão são:
C= 5.(F-32)/9
F= (9.C/5) + 32
meu e-mail é melitafengler@gnail.com
Olá Melita,
Você tentou resolver? Chegou até onde?
Pode postar seu código e perguntar qual sua dúvida?
Olá
Para quem tentou fazer o Desafio 1, achar os números primos, eis uma solução tosca (usa demais a CPU), mas funcional do desafio. Por dois dias tentei encontrar uma forma mais "racional" de calcular os primos, sem apelar para a força bruta do computador, mas descobri que não existe fórmula matemática para isso. Então ai vai minha contribuição, quem sabe alguém apresente outra.
#include
#include
#include
/*
aplicativo em C que acha todos os números primos até 1000
*/
int main()
{
setlocale(LC_ALL,"");
int i,j,n,rest,conta;
for(i=2;i<1000;i++)
{
for(j=1;j<1000;j++)
{
if(i%j==0)
n+=1;/*conta quantas ocorrências há de módulo 0, os primos só tem duas*/
}
if(n<3)
{
printf("%5i ",i);
conta+=1;/*contador para pular linhas a cada 10 primos*/
}
n=0;
if(conta==10)
{
printf("\n");
conta=0;
}
}
return 0;
}
JOAO CARLOS, a minha ideia pra resolver a questão dos números primos é igual a sua,porem o meu algoritmo está modularizado e na função PRIMOS quando é identificado que o número passado não é primo eu dei um break.
foram encontrados 9592 números primos de 1 até 100000. e a minha maquina levou mais de 17segundos. tentei com 1000000 mas não consegui.minha maquina é muito basica. e a sua?
/*
Este programa diz a quantidade e mostra os números primos de 1 ate n.
Autor: André de Souza
Data: 28/12/2014
*/
#include
int primos(int num);
int conta_Primos(int num);
void mostra_Primos(int num);
int main(void){
printf("Quantidade de números primos: %d\n",conta_Primos(100000));
mostra_Primos(100000);
}
//diz se o numero passado é primo ou nao é
int primos(int num){
int count,qtd=0;
for(count=1;count<=num;count++){
if(num%count==0)
qtd+=1;
//se qtd maior que 2 entao não é número primo
if(qtd>2)
break;
}
if (qtd==2)
return 1;
else
return 0;
}
//diz quantos números primos existem ate o número passado
int conta_Primos(int num){
int count,qtd=0;
for (count=1;count<=num;count++){
if(primos(count)==1)
qtd+=1;
}
return qtd;
}
void mostra_Primos(int num){
int count,qtd=0;
printf("\t\tNÚMEROS PRIMOS ATÉ %d\n\n",num);
for (count=1;count<=num;count++){
if(primos(count)==1){
qtd+=1;
//para imprimir todos primos com 5 digitos
//claro que so vai funcionar ate 100000
printf("%.5d ",count);
//para quebrar linha depois que exibiu 10 numeros primos
if(qtd==10){
qtd=0;
printf("\n");
}
}
}
}
link para ver uma imagem do programa em execução:
https://sites.google.com/site/aprendendoaprogramaremc/
#include
#include
int main ()
{
float ftemp, ctemp;
printf("digite temperatura em graus Celsius:\n");
scanf("%f", &ctemp);
ftemp=ctemp * 9/5 + 32;
printf("\n temperatura em graus Fahrenheit e %2f\n", ftemp);
system ("pause");
return 0;
}
Um programa para gerar e imprimir uma tabela verdade, dada um expressão qualquer.
Sobre o exercicio9, como foi definido que seriam 6 variáveis?
E se eu não sei quantos números eu tenho que armazenar, como fariamos?
Eu não consigo fazer nada disso. Estou fazendo o curso de informática e sempre tiro nota baixa nas provas.Tento fazer mas sempre está errado. Se alguém puder me ajudar, muito obrigada! :(
Postar um comentário