Baixe o app para aproveitar ainda mais
Prévia do material em texto
Projeto e Planejamento de Experimentos para Eletroˆnica Prova1 - 29/04/2014 Soluc¸a˜o 1. (2 pontos) Escreva uma func¸a˜o em Linguagem C que calcula a a´rea de um triaˆngulo, recebendo como paraˆmetro o comprimento dos 3 lados a, b, c. Esta func¸a˜o deve ter o seguinte proto´tipo: double AreaTri(double a, double b, double c); Esta func¸a˜o deve retornar a a´rea de um triaˆngulo com lados a, b, c. O ca´lculo da a´rea deve ser feito usando a fo´rmula de Heron: area = √ p(p− a)(p− b)(p− c) (1) Onde p e´ o semiper´ımetro: p = a+ b+ c 2 (2) Se o termo p(p − a)(p − b)(p − c) ficar negativo, a func¸a˜o deve retornar o resultado -1 antes de tentar calcular a raiz quadrada. Soluc¸a˜o #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˜o da questa˜o anterior para calcular a a´rea de um triaˆngulo. Este programa deve receber os tres comprimentos dos lados do triaˆngulo 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ˆmetros na chamada da func¸a˜o AreaTri. No final o programa deve escrever uma mensagem informando a a´rea. Se a func¸a˜o retornou -1, o programa deve escrever uma mensagem dizendo que o triaˆngulo e´ inva´lido em vez de informar a a´rea. Soluc¸a˜o int main(int argc, char **argv) { if(argc < 4) { fprintf(stderr, "Sintaxe:\n%s <a> <b> <c>\n", argv[0]); return -1; } printf("\nArea = %lf\n", 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˜o formada por um ponto e elgumas letras no final que indica qual e´ o tipo deste arquivo. Escreva uma func¸a˜o chamada SeparaExt com o seguinte proto´tipo: char *SeparaExt(char *nomearq); Esta func¸a˜o 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˜o. O valor retornado deve ser um apontador para o local onde o ponto foi encontrado. Se na˜o houver nenhum ponto no nome do arquivo, a func¸a˜o deve retornar um apontador para o caractere nulo do fim de string. 1 Algoritmo recomendado • Inicializar o apontador apontando para o final da string nomearq • Percorrer a string verificado se o caractere e´ um ponto. Se for, registrar o local onde foi encontrado no apontador • Terminar retornando o apontador Soluc¸a˜o char *SeparaExt(char *nomearq) { char *ext; for(ext = nomearq; *ext; ext++); while(*nomearq) { if(*nomearq == ’.’) ext = nomearq; nomearq++; } return ext; } 4. (2 pontos) Escreva um programa principal para testar a func¸a˜o SeparaExt da questa˜o 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˜o o programa deve escrever uma mensagem mostrando qual e´ a exte´nc¸a˜o do arquivo. Para isto deve usar a func¸a˜o SeparaExt. Soluc¸a˜o int main(int argc, char **argv) { char nomearq[80]; char *ext; if(argc < 2) { printf("Nome do arquivo = "); scanf("%80s", nomearq); ext = SeparaExt(nomearq); } else ext = SeparaExt(argv[1]); printf("\nExtencao = %s\n", 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 >= ’a’ && c <= ’z’) c += (’A’-’a’); putchar(c) } return 0; } Soluc¸a˜o gcc -Wall -o escrevemai.exe escrevemai.c escrevemai < escrevemai.c 2
Compartilhar