VOLPITI - Tecnologia da Informação
 
Busca
Tópicos
  Cadastre-se :: Hospedagem LinuxDicas :: Acessórios LinuxDicas :: Fórum LinuxDicas   

Usuários LinuxDicas
· AvantGO
· Backend XML (RSS)
· Contato/Publicidade
· Enviar Notícias/Artigos
· Fórum LinuxDicas
· Lista de Discussão
· Mensagens Privadas

Casa do Linux


Lista de Discussão
·[linuxdicas] quetão de linux
·Ferramenta de Backup
·redes
·Search Engine

Leia mais...

Artigos LinuxDicas
· Resistência ao Linux
· Guia para o Novato
· Licenciamento do SuSE
· Foca GNU/Linux - Iniciante
· Foca GNU/Linux - Intermediário
· Foca GNU/Linux - Avançadoe
· Curso C
· Outras Seções de Artigos

FAQ LinuxDicas
· Licença
· Servidores
· Ambiente X
· Hardware
· Instalação
· Internet
· Aplicativos
· Sistema
· StarOffice

Notícias Velhas
Segunda, abril 21
· MON - Monitorando a disponibilidade de serviços
Quinta, abril 17
· Últimos dias para Inscrições de Palestras no Flisol Campinas
· Acessando seus arquivos de sua máquina de qualquer computador do mundo
Terça, abril 15
· Artigo sobre o Moregroupware
Segunda, abril 14
· Análise do Mandriva Xtreme2 Pack
Terça, março 18
· Como migrar dados do msaccess para mysql
· A verdadeira razão para usarmos Linux
· usando o rsync 3.0.0 para fazer backup entre linux e xp
· Firefox3 : Como Instalar manualmente.
Sábado, fevereiro 09
· Configurando um DNS CHROOTED Primário e Reverso para o seu site.
Quinta, dezembro 27
· Censurando a internet com o OpenDNS
Domingo, outubro 14
· Bandwidth Monitoring Tools For Linux
Quinta, outubro 11
· Variáveis de ambiente
Quinta, agosto 02
· Rodando processos em múltiplos servidores, Cluster!!!
· Instalando XEN no seu Ubuntu/Debian
Domingo, junho 17
· Vovó, faz backup pra mim?
Quarta, junho 13
· Canetas: Idealismo Antártico
Quinta, junho 07
· CA confiável com certificados digitais
Domingo, junho 03
· Equações Matemáticas via Shell
Sábado, junho 02
· Permanent Link to Garimpar é preciso [2]: Confira seu e-mail

Notícias antigas

Versões Estáveis
· Kernel Linux
· *nix e *BSD ISOs da Unicamp
· Linux ISO
· FreeBSD Releases

Correção dos Exercícios - Aula 6

(1190 total de palavras neste texto)
(3370 vizualização(ões))   Imprimir




Exercícios

1) Escreva um programa que, dadas as constantes a, b e c de uma equação do segundo grau, calcule o delta e, se possível, calcule as raízes x' e x''.

  #include <stdio.h>
  #include <math.h>	
  
  
  
  main()
  {
  	int a, b, c, delta;
  	float x1, x2;
  	
  	printf("*** Equação do Segundo Grau ***\n");
  	printf("Digite a: ");
  	scanf("%d", &a);  getchar();
  	
  	printf("Digite b: ");
  	scanf("%d", &b);  getchar();
  	
  	printf("Digite c: ");
  	scanf("%d", &c);  getchar();
  	
  	delta= (b*b)-(4*a*c);	/* Calcula o delta */
  	
  	if (delta < 0)
  	{
  		printf("Delta: %d\n", delta);
  		printf("Delta negativo!\n");	
  		return 0;   			/* pára por aqui mesmo */
  	}
  	x1= (-b + sqrt(delta))/(2*a);		/* sqrt retorna a raiz quadrada de um número */
  	x2= (-b - sqrt(delta))/(2*a);
  	printf("Delta: %d\n", delta);
  	printf("Raízes:\n");
  	printf("x1: %.2f, x2: %.2f\n", x1, x2);
  	return 0;
  }

OBS: Aqui usamos uma função que ainda não tinhamos visto: a sqrt(), que retorna a raiz quadrada de um número. Mas o propósito era fazer vocês baterem cabeça... Agora, pelo menos, vocês não esquecem que sqrt() retorna a raiz quadrada de um número.

Para compilar, digite o seguinte comando:

  $ gcc delta.c -o delta -lm

Esse -lm significa que você quer ligar seu programa a uma biblioteca. Forma geral: -lnome_biblioteca. m é a biblioteca math.h. Sem esse -lm, seu programa não compila. (isso para o gcc, no Linux. Para outros compiladores, consulte o manual).

2) Dada a nota de um aluno, faça um programa que calcule a média e imprima se o aluno foi aprovado sem exame (>= 7), se ficou de exame (>= 4 e < 7) ou se reprovou direto (< 4).

OBS: Desculpem, o enunciado está incorreto! O correto seria dada a nota da prova e do trabalho... Mas, vamos resolver... Pelo menos vocês terão mais um exemplo... A prova e o trabalho tem o mesmo peso.

  #include <stdio.h>
  
  main()
  {
  	float prova, trab, media;
  	
  	printf("Digite a nota da prova: ");
  	scanf("%f", &prova);	getchar();
  	printf("Digite a nota do trabalho: ");
  	scanf("%f", &trab);	getchar();
  	
  	media= (trab+prova)/2;
  	
  	if (media >= 7)
  		printf("Aprovado direto (sem exame)\n");
  	else
  	if ((media < 7) && (media >= 4))
  		printf("Ficou de exame\n");
  	else
  		printf("Dançou, neném... Reprovado!\n");
  		
  	return 0;
  }

Prometo ter mais atenção na hora de fazer o enunciado dos exercícios...

3) Faça um programa que leia o login e a senha de um usuário e imprima se ele está logado ou se tem acesso negado. OBS: Deve-se usar a função de comparação entre strings, strcmp(string1, string2), que retorna 0 se as duas strings forem iguais. Para poder se logar, o nome de usuário será "linuxdicas" e a senha "h56yu89".

Pessoal, me perdoem outra vez... Pelo seguinte: ao ler uma string com fgets(), além de armazenar a string e o caractere nulo (\0), é armazenado também o caractere de quebra de linha. Portanto, fgets() com strcmp(), no caso de comparar uma string lida com uma string pré-definida, não trabalhará de acordo, por causa do bendito caractere de quebra de linha. Vocês podem optar por dois caminhos:

O que eu considero o melhor, no caso deste exercício, e mais seguro, é usar fgets() com a função de comparação de strings strncmp(). A função strncmp() possui três argumentos: as duas strings que serão comparadas e um número inteiro, que determina quantos caracteres serão comparados entre as duas strings. Por exemplo, "linuxdicas" tem 10 caracteres, então deve-se colocar strncmp(login, "linuxdicas", 10), que só vai comparar a palavra "linuxdicas", sem nada de caracteres de quebra de linha indesejados...

O outro caminho, mais suscetível a falhas no software, é usar gets() com strcmp() (com gets() funciona, porque gets() não armazena o caractere de nova linha junto com a string). Mas, você sabe do risco...

Você deve estar pensando: caramba, eu me mato prá fazer o exercício e depois o bragil fala que o enunciado tá errado?

Não se preocupe!! Nesta aula você deve sair sabendo usar o if, o else e o switch. Na aula sobre matrizes e strings é que nós temos que nos preocupar com essas funções...

  #include <stdio.h>
  #include <string.h>
  
  main()
  {
  	char login[15];
  	char senha[15];
  	
  	printf("Login: ");
  	fgets(login, 14, stdin);
  	printf("Senha: ");
  	fgets(senha, 14, stdin);
  	
  	if ((strncmp(login,"linuxdicas", 10) == 0) && (strncmp(senha,"h56yu89", 7) == 0))
  		printf("Login efetuado com sucesso!\n");
  	else
  		printf("Acesso negado!\n");
  		
  	return 0;
  }

4) Escreva um programa que leia a velocidade que um carro passou pelo radar e calcule a sua multa. Considere a tabela a seguir:

Velocidade Multa
>= 100 Km/h R$ 600,00
< 100 Km/h e >= 80 Km/h R$ 300,00
< 80 Km/h e > 60 Km/h R$ 120,00

  #include <stdio.h>
  
  main()
  {
  	int veloc;
  	float multa;
  	
  	printf("Digite a velocidade do automóvel (em Km/h): ");
  	scanf("%d", &veloc);
  	
  	if (veloc >= 100)
  		multa= 600;
  	else
  	if ((veloc < 100) && (veloc >= 80))
  		multa= 300;
  	else
  	if ((veloc < 80) && (veloc > 60))
  		multa= 120;
  	else
  		multa= 0;
  	if (multa > 0)
  		printf("Multa: %.2f\n", multa);
  	else
  		printf("Não recebeu multa.\n");
  	
  	return 0;
  }

5) Faça um programa de calculadora similar ao exemplo da aula, mas que faça cálculos bit a bit, com operadores and, or, not, xor, deslocamento para esquerda e para a direita.

  #include <stdio.h>
  
  main()
  {
  	int n1, n2;
  	char op;
  	
  	printf("*** Calculadora Bit-a-Bit ***\n");
  	
  	printf("Digite o primeiro operando: ");
  	scanf("%d", &n1); getchar();
  
  	printf("\nA:and, O:or, N:not, X:xor\nE:deslocamento para esquerda, D:deslocamento para direita\n");
  	printf("Digite o operador: ");
  	scanf("%c", &op); getchar();
  	
  	if (op != 'N')	/* como a operação NOT é unária, não precisa do segundo operando */
  	{
  		printf("Digite o segundo operando: ");
  		scanf("%d", &n2); getchar();
  	}
  	
  	switch(op)
  	{
  		case 'A':
  			printf("%d AND %d= %d\n", n1, n2, n1 & n2);
  			break;
  		case 'O':
  			printf("%d OR %d= %d\n", n1, n2, n1 | n2);
  			break;
  		case 'N':
  			printf("NOT %d= %d\n", n1, ~n1);
  			break;
  		case 'E':
  			printf("%d << %d= %d\n", n1, n2, n1 << n2);
  			break;
  		case 'D':
  			printf("%d >> %d= %d\n", n1, n2, n1 >> n2);
  			break;
  		default:
  			printf("Operador Inválido: %c\n", op);
  			break;
  	}
  	return 0;
  }

Pessoal, me desculpem pelos erros... Bem, pelo menos agora vocês sabem como comparar strings lidas com fgets() com strings pré-definidas, sabem também que para usar a math.h precisa compilar com a opção -lm para ligar o código do programa à biblioteca.

Bem, apesar de tudo, o objetivo era fazer vocês exercitarem if, else e switch.

Falow!!

bragil


Powered by txt2tags

  

[ Voltar Curso C | Índice de Seções ]


Copyright © 2002 - 2007 LinuxDicas - Todos Os Direitos Reservados.
LinuxDicas: lucas.martinez @linuxdicas.com.br
Web site engine's code is Copyright © 2003 by PHP-Nuke. All Rights Reserved. PHP-Nuke is Free Software released under the GNU/GPL license.
Tempo para gerar esta página: 0.044 segundos.