Prova P1 Stemmer
2 pág.

Prova P1 Stemmer


DisciplinaProjeto e Planejamento de Experimentos para Eletrônica4 materiais26 seguidores
Pré-visualização1 página
Projeto e Planejamento de Experimentos para Eletro\u2c6nica
Prova1 - 29/04/2014 Soluc¸a\u2dco
1. (2 pontos) Escreva uma func¸a\u2dco em Linguagem C que calcula a a´rea de um tria\u2c6ngulo, recebendo como
para\u2c6metro o comprimento dos 3 lados a, b, c. Esta func¸a\u2dco deve ter o seguinte proto´tipo:
double AreaTri(double a, double b, double c);
Esta func¸a\u2dco deve retornar a a´rea de um tria\u2c6ngulo com lados a, b, c. O ca´lculo da a´rea deve ser feito
usando a fo´rmula de Heron:
area =
\u221a
p(p\u2212 a)(p\u2212 b)(p\u2212 c) (1)
Onde p e´ o semiper´\u131metro:
p =
a+ b+ c
2
(2)
Se o termo p(p \u2212 a)(p \u2212 b)(p \u2212 c) ficar negativo, a func¸a\u2dco deve retornar o resultado -1 antes de tentar
calcular a raiz quadrada.
Soluc¸a\u2dco
#include <math.h>
double AreaTri(double a, double b, double c)
{
double p;
p = (a + b + c)/2;
p = p*(p - a)*(p - b)*(p - c);
return p < 0? -1.0: sqrt(p);
}
2. (2 pontos) Escreva um programa principal, que usa a func¸a\u2dco da questa\u2dco anterior para calcular a a´rea de um
tria\u2c6ngulo. Este programa deve receber os tres comprimentos dos lados do tria\u2c6ngulo na linha de comando.
Se faltarem palavras na linha de comando o programa deve escrever uma mensagem de erro dizendo qual
e´ a sintaxe esperada e terminar. Tendo pelo menos 4 palavras na linha de comando, o programa deve
converter os argumentos para nu´meros tipo double e usa-los como para\u2c6metros na chamada da func¸a\u2dco
AreaTri. No final o programa deve escrever uma mensagem informando a a´rea. Se a func¸a\u2dco retornou -1,
o programa deve escrever uma mensagem dizendo que o tria\u2c6ngulo e´ inva´lido em vez de informar a a´rea.
Soluc¸a\u2dco
int main(int argc, char **argv)
{
if(argc < 4) {
fprintf(stderr, &quot;Sintaxe:\n%s <a> <b> <c>\n&quot;, argv[0]);
return -1;
}
printf(&quot;\nArea = %lf\n&quot;, AreaTri(atof(argv[1]), atof(argv[2]), atof(argv[3])));
return 0;
}
3. (2 pontos) Os nomes de arquivos em MSDOS ou em Windows costumam ter uma extenc¸a\u2dco formada por
um ponto e elgumas letras no final que indica qual e´ o tipo deste arquivo. Escreva uma func¸a\u2dco chamada
SeparaExt com o seguinte proto´tipo:
char *SeparaExt(char *nomearq);
Esta func¸a\u2dco recebe um string que representa um nome de arquivo e procura pelo ponto que separa a parte
principal do nome do arquivo da extenc¸a\u2dco. O valor retornado deve ser um apontador para o local onde
o ponto foi encontrado. Se na\u2dco houver nenhum ponto no nome do arquivo, a func¸a\u2dco deve retornar um
apontador para o caractere nulo do fim de string.
1
Algoritmo recomendado
\u2022 Inicializar o apontador apontando para o final da string nomearq
\u2022 Percorrer a string verificado se o caractere e´ um ponto. Se for, registrar o local onde foi encontrado
no apontador
\u2022 Terminar retornando o apontador
Soluc¸a\u2dco
char *SeparaExt(char *nomearq)
{
char *ext;
for(ext = nomearq; *ext; ext++);
while(*nomearq) {
if(*nomearq == \u2019.\u2019) ext = nomearq;
nomearq++;
}
return ext;
}
4. (2 pontos) Escreva um programa principal para testar a func¸a\u2dco SeparaExt da questa\u2dco anterior. Este
programa deve receber o nome do arquivo na linha de comando. Se faltar o nome do arquivo na linha
de comando, o programa deve solicitar que seja fornecido pelo usua´rio atrave´s de um dia´logo interativo.
Enta\u2dco o programa deve escrever uma mensagem mostrando qual e´ a exte´nc¸a\u2dco do arquivo. Para isto deve
usar a func¸a\u2dco SeparaExt.
Soluc¸a\u2dco
int main(int argc, char **argv)
{
char nomearq[80];
char *ext;
if(argc < 2) {
printf(&quot;Nome do arquivo = &quot;);
scanf(&quot;%80s&quot;, nomearq);
ext = SeparaExt(nomearq);
}
else ext = SeparaExt(argv[1]);
printf(&quot;\nExtencao = %s\n&quot;, ext);
return 0;
}
5. (2 ponros) O programa a seguir chama-se escrevemai.c. Mostre qual e´ o comando que se usa para
compilar este programa usando o gcc para gerar um executa´vel chamado escrevemai.exe. Informe como
este programa pode ser usado para listar o arquivo escrevemai.c convertendo as letras para maiu´sculas.
#include <stdio.h>
int main(void)
{
int c;
while((c=getchar())!=-1) {
if(c >= \u2019a\u2019 && c <= \u2019z\u2019) c += (\u2019A\u2019-\u2019a\u2019);
putchar(c)
}
return 0;
}
Soluc¸a\u2dco
gcc -Wall -o escrevemai.exe escrevemai.c
escrevemai < escrevemai.c
2