Mudanças entre as edições de "PRG-2011"
Linha 398: | Linha 398: | ||
4) Um número complexo possui uma parte imaginaria e uma parte real. Fazer um programa para ler dois números complexos e somá-los. | 4) Um número complexo possui uma parte imaginaria e uma parte real. Fazer um programa para ler dois números complexos e somá-los. | ||
Defina o tipo complexo como uma struct da forma: | Defina o tipo complexo como uma struct da forma: | ||
+ | |||
+ | PROPOSTA 1 - SEM USAR FUNÇÔES ADICIONAIS | ||
<syntaxhighlight lang=c> | <syntaxhighlight lang=c> | ||
Linha 432: | Linha 434: | ||
} | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | PROPOSTA 1 - COM FUNÇÔES ADICIONAIS - | ||
+ | |||
+ | NOTA1: As estruturas são passadas por valor (cópias). O mais eficiente seria passar por referência (endereços) | ||
+ | NOTA2: Fazer a função de multiplicação indicada! | ||
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | #include <stdio.h> | ||
+ | struct TComplexo { | ||
+ | float real; | ||
+ | float imaginario; | ||
+ | }; | ||
+ | |||
+ | struct TComplexo SomarComplexos(struct TComplexo a, struct TComplexo b) | ||
+ | { | ||
+ | struct TComplexo Resultado; | ||
+ | |||
+ | Resultado.real = a.real + b.real; | ||
+ | Resultado.imaginario = a.imaginario + b.imaginario; | ||
+ | return Resultado; | ||
+ | } | ||
+ | |||
+ | struct TComplexo MultiplicarComplexos(struct TComplexo a, struct TComplexo b) | ||
+ | { | ||
+ | } | ||
+ | |||
+ | main() | ||
+ | { | ||
+ | struct TComplexo Numero1,Numero2,Resultado; | ||
+ | |||
+ | /* Entrada de dados */ | ||
+ | |||
+ | printf("\nEntre com a parte real do primeiro numero => "); | ||
+ | scanf ("%f",&Numero1.real); | ||
+ | printf("\nEntre com a parte imaginaria do primeiro numero => "); | ||
+ | scanf ("%f",&Numero1.imaginario); | ||
+ | |||
+ | printf("\nEntre com a parte real do primeiro numero => "); | ||
+ | scanf ("%f",&Numero2.real); | ||
+ | printf("\nEntre com a parte imaginaria do primeiro numero => "); | ||
+ | scanf ("%f",&Numero2.imaginario); | ||
+ | |||
+ | /* Soma dos complexos */ | ||
+ | //Resultado.real = Numero1.real + Numero2.real; | ||
+ | //Resultado.imaginario = Numero1.imaginario + Numero2.imaginario; | ||
+ | |||
+ | /* imprimir resultado */ | ||
+ | |||
+ | Resultado = SomarComplexos(Numero1,Numero2); | ||
+ | printf("Resultado da soma - Parte real = %f\n",Resultado.real); | ||
+ | printf("Resultado da soma - Parte imaginaria = %f\n",Resultado.imaginario); | ||
+ | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Edição das 17h31min de 1 de julho de 2011
Nome do Professor: Eraldo Silveira e Silva
email: eraldo@ifsc.edu.br
Material de Referência
- Apostila adotada: Curso de Linguagem C - Engenharia Elétrica - UFMG
Avaliação
Trabalhos: 30% Prova: 70%
Aulas
== 26/05:
01/06: Aula 1 e 2 do Curso UFMG
02/06: Cont.Aula 2 do Curso UFMG
08/06: Aula 2 do Curso UFMG
09/06: Aula 2 do Curso UFMG
15/06: Aula 3 do Curso UFMG
Propor resolver questão
Tarefa para casa:
1) Escrever um programa que leia como dados de entrada dois números inteiros positivos: "s" e "q". O programa deve computar os dez primeiros números da PG (progressão geométrica), onde "s" é o número inicial e "q" a razão da progressão.
Obs: Para PG tem-se:
- ou
2) Repetir para P.A (progressão aritmética). Obs:
3) Organizar (1) e (2) em um programa único, com uma função para PG e outra para PA. Enviar para o professor até 07/06 às 23:59!
Controle de Entrega de Trabalhos
Legenda:
- S: entregou
- N: não entregou
Aluno | Trabalho 1 | Trabalho 2 | Trabalho 3 | Trabalho 4 | Trabalho 5 | Trabalho 6 |
---|---|---|---|---|---|---|
Alfredo | ||||||
Ângelo | ||||||
Beatriz | S | |||||
Bruno da Silva | S | |||||
Bruno | S | |||||
Caroline | S | |||||
Danilo | ||||||
Dayze | S | |||||
Fabiana | S | |||||
Felipe | ||||||
Gabriel | S | |||||
Grazielle | ||||||
Jayson | ||||||
Juliano | ||||||
Leandro | ||||||
Leonardo |
16/06: Aula 7 do Curso UFMG
22/06: Semana de Telecomunicações
23/06: Feriado
29/06: Aula 4 e 5 do Curso UFMG
-revisão comando for
-comando while
-comando do
-comando switch
-revisão comandos break e continue;
EXERCÍCIOS
1) Fazer um programa para computar o número de caracteres de uma cadeia (string) lida pelo teclado.Use o comando for;
#include <stdio.h>
void main ()
{
char alfa[50];
int i;
printf ("Entre com a cadeia: ");
scanf("%s",alfa);
for (i=0;alfa[i]!=0;i++)
;
printf ("\nNumero de caracteres em %s = %d \n", alfa, i);
}
2) Repetir (1) com while;
#include <stdio.h>
void main ()
{
char alfa[50];
int i;
printf ("Entre com a cadeia: ");
scanf("%s",alfa);
i=0;
while (alfa[i]!=0) {
i++;
}
printf ("\nNumero de caracteres em %s = %d \n", alfa, i);
}
3) Refazer o exercício 2 colocando a função que faz a computação do tamanho da cadeia em uma função;
#include <stdio.h>
int calc_tamanho(char cadeia[])
{
int i=0;
while (cadeia[i]!=0) {
i++;
}
return i;
}
void main ()
{
char alfa[50];
int tamanho;
printf ("Entre com a cadeia: ");
scanf("%s",alfa);
tamanho = calc_tamanho(alfa);
printf ("\nNumero de caracteres em %s = %d \n", alfa, tamanho);
}
4) Fazer um programa para ler duas cadeias de caracteres (strings) e dizer qual delas possui mais caracter que a outra;
#include <stdio.h>
int calc_tamanho(char cadeia[])
{
int i=0;
while (cadeia[i]!=0) {
i++;
}
return i;
}
void main ()
{
char alfa[50],beta[50];
int tam1,tam2;
/* Leitura dos dados */
printf ("\nEntre com a cadeia alfa: ");
scanf("%s",alfa);
printf ("Entre com a cadeia beta: ");
scanf("%s",beta);
/* Computação dos tamanhos das cadeias */
tam1=calc_tamanho(alfa);
tam2=calc_tamanho(beta);
/* Verificacão da cadeia maior */
if (tam1>tam2)
printf ("alfa maior que beta\n");
else
printf("beta maior que alfa\n");
}
5) Refazer (4) colocando a comparação em uma função.
#include <stdio.h>
int calc_tamanho(char cadeia[])
{
int i=0;
while (cadeia[i]!=0) {
i++;
}
return i;
}
int comparar_cadeias(char cadeia1[], char cadeia2[])
{
int tam1,tam2, condicao_retorno;
tam1 = calc_tamanho(cadeia1);
tam2 = calc_tamanho(cadeia2);
if (tam1 == tam2)
condicao_retorno = 0;
else if (tam1>tam2)
condicao_retorno = 1;
else
condicao_retorno = -1;
return condicao_retorno;
}
void main ()
{
char alfa[50],beta[50];
int condicao;
/* Leitura dos dados */
printf ("\nEntre com a cadeia alfa: ");
scanf("%s",alfa);
printf ("Entre com a cadeia beta: ");
scanf("%s",beta);
/*Comparar cadeias */
condicao = comparar_cadeias(alfa,beta);
/* Mostrar resultado da comparacao */
if (condicao==1)
printf("\nalfa MAIOR que beta\n");
else if (condicao==0)
printf("\nCadeias de igual tamanho\n");
else
printf("\nalfa MENOR que beta\n");
}
30/06: Finalizando conteúdo - EXERCÍCIOS
-Uso de biblioteca por exemplo: manipulação de strings
-Tipos construídos pelo usuário: struct
-O operador de endereços &
EXERCÍCIOS:
1) Construir uma função que recebe dois parâmetros: um vetor de floats e o tamanho do vetor. A função deve retornar a média dos valores deste vetor. O programa principal deve ler os elementos do vetor até um número negativo apareça. Este é o final da entrada de dados. A função deve ser chamada para computar a média.
ESQUELETO DA SOLUÇÃO
#include <stdio.h>
float calcular_media_vetor(float vetor[], int tamanho)
{
float SomaAcumulada=0;
int i;
for(i=0;i<tamanho;i++) {
SomaAcumulada = SomaAcumulada + vetor[i];
}
return (SomaAcumulada/tamanho);
}
void main()
{
float vetor_lido[50];
float auxiliar;
float media;
int i,tamanho_vetor_lido;
/* Ler vetor */
i = 0;
auxiliar = 0;
do {
printf("\nElemento[%d] = ",i);
scanf("%f",&auxiliar);
if (auxiliar < 0)
break;
else
vetor_lido[i++] = auxiliar;
} while(1);
tamanho_vetor_lido = i;
printf("\nFim da entrada de dados\n");
/* Calcular media */
media = calcular_media_vetor(vetor_lido,i);
/* Imprimir media */
printf ("Media = %f\n",media);
}
2) Repetir o exercício 1 descartando o menor e o maior número do vetor, para fins da computação da média.
3) Traduzir o programa contador de moedas da wiki do Prof.Marcelo Sobral para o C:
Contador de moedas: faça um programa que leia valores de moedas e some as quantidades de tipos de moedas informadas. Por exemplo, se o usuário digitar 25, 50, 25, 5, 10, 5, o programa deve informar: 2 moedas de 5 centavos, 1 moeda de 10 centavos, 2 moedas de 25 centavos, 1 moeda de 50 centavos. São aceitos apenas valores de moedas de 1, 5, 10, 25 e 50 centavos. Seu programa deve ler 10 valores de moedas, e então apresentar o resultado.
inicio
inteiro m1, m5, m10, m25, m50
inteiro moeda
inteiro n
enquanto n < 10 faz
escrever "Moeda: "
ler moeda
escolhe moeda
caso 1:
m1 <- m1 + 1
caso 5:
m5 <- m5 + 1
caso 10:
m10 <- m10 + 1
caso 25:
m25 <- m25 + 1
caso 50:
m50 <- m50 + 1
defeito:
escrever "Valor invalido ...\n"
n <- n - 1
fimescolhe
n <- n + 1
fimenquanto
escrever "Moedas de 1 centavo: ", m1
escrever "\nMoedas de 5 centavos: ", m5
escrever "\nMoedas de 10 centavos: ", m10
escrever "\nMoedas de 25 centavos: ", m25
escrever "\nMoedas de 50 centavos: ", m50
fim
4) Um número complexo possui uma parte imaginaria e uma parte real. Fazer um programa para ler dois números complexos e somá-los. Defina o tipo complexo como uma struct da forma:
PROPOSTA 1 - SEM USAR FUNÇÔES ADICIONAIS
#include <stdio.h>
struct TComplexo {
float real;
float imaginario;
};
main()
{
struct TComplexo Numero1,Numero2,Resultado;
/* Entrada de dados */
printf("\nEntre com a parte real do primeiro numero => ");
scanf ("%f",&Numero1.real);
printf("\nEntre com a parte imaginaria do primeiro numero => ");
scanf ("%f",&Numero1.imaginario);
printf("\nEntre com a parte real do primeiro numero => ");
scanf ("%f",&Numero2.real);
printf("\nEntre com a parte imaginaria do primeiro numero => ");
scanf ("%f",&Numero2.imaginario);
/* Soma dos complexos */
Resultado.real = Numero1.real + Numero2.real;
Resultado.imaginario = Numero1.imaginario + Numero2.imaginario;
/* imprimir resultado */
printf("Resultado da soma - Parte real = %f\n",Resultado.real);
printf("Resultado da soma - Parte imaginaria = %f\n",Resultado.imaginario);
}
PROPOSTA 1 - COM FUNÇÔES ADICIONAIS -
NOTA1: As estruturas são passadas por valor (cópias). O mais eficiente seria passar por referência (endereços) NOTA2: Fazer a função de multiplicação indicada!
#include <stdio.h>
struct TComplexo {
float real;
float imaginario;
};
struct TComplexo SomarComplexos(struct TComplexo a, struct TComplexo b)
{
struct TComplexo Resultado;
Resultado.real = a.real + b.real;
Resultado.imaginario = a.imaginario + b.imaginario;
return Resultado;
}
struct TComplexo MultiplicarComplexos(struct TComplexo a, struct TComplexo b)
{
}
main()
{
struct TComplexo Numero1,Numero2,Resultado;
/* Entrada de dados */
printf("\nEntre com a parte real do primeiro numero => ");
scanf ("%f",&Numero1.real);
printf("\nEntre com a parte imaginaria do primeiro numero => ");
scanf ("%f",&Numero1.imaginario);
printf("\nEntre com a parte real do primeiro numero => ");
scanf ("%f",&Numero2.real);
printf("\nEntre com a parte imaginaria do primeiro numero => ");
scanf ("%f",&Numero2.imaginario);
/* Soma dos complexos */
//Resultado.real = Numero1.real + Numero2.real;
//Resultado.imaginario = Numero1.imaginario + Numero2.imaginario;
/* imprimir resultado */
Resultado = SomarComplexos(Numero1,Numero2);
printf("Resultado da soma - Parte real = %f\n",Resultado.real);
printf("Resultado da soma - Parte imaginaria = %f\n",Resultado.imaginario);
}
5) Fazer um programa para ler um vetor de inteiros não negativos (um negativo é o final da leitura) e copiar o vetor para outro vetor chamador vetor_crescente. Colocar este vetor_crescente na forma ordenada crescente. Imprimir os dois vetores.
6) Fazer um programa que define dois vetores de tamanho 50: um vetor de char e um vetor de inteiros. Imprimir os endereços das posições 0,1 e 2 de cada vetor no formato hexadecimal. Olhando os resultados é possível inferir o tamanho de um char e de um int?