Baixe o app para aproveitar ainda mais
Prévia do material em texto
1º EE 2013.2 1ª questão #include <stdio.h> #include <stdlib.h> void fatorial(int x) { int f = 1; while ( x > 0 ) { f = f*x; x--; } printf("O valor do fatorial eh : %d\n",f); } int divisao(int x, int k) { int resposta; if ( x % k == 0 ) { resposta = 1; } else { resposta = 0 ; } return resposta; } void imprimedivisores(int x) { int i, retorno; for ( i = 1 ; i <= x ; i++ ) { retorno = divisao(x,i); if ( retorno == 1 ) { printf("%d,", i ); } } printf("\n"); } int main() { int numero; do { printf("Digite o numero:\n"); scanf("%d",&numero); if ( numero > 0 ) { fatorial(numero); imprimedivisores(numero); } } while ( numero > 0 ); return 0 ; } 2ª questão #include <stdio.h> #include <stdlib.h> int main() { int Mat[10][10]; int m, n, i, j, k = 0 , cont; do { printf("Digite a quantidade de linhas:\n"); scanf("%d",&m); if ( m <= 0 || m > 10 ) { printf("Numero invalido!\n"); } }while( m <= 0 || m > 10 ); do { printf("Digite a quantidade de colunas:\n"); scanf("%d",&n); if ( n <= 0 || n > 10 ) { printf("Numero invalido!\n"); } }while( n <= 0 || n > 10 ); for ( i = 0 ; i < m ; i++ ) { for ( j = 0 ; j < n ; j++ ) { do { printf("Elemento[%d][%d]:\n",i,j); scanf("%d",&Mat[i][j]); if ( Mat[i][j] < 0 || Mat[i][j] > 20 ) { printf("Numero fora do intervalo!\n"); } }while ( Mat[i][j] < 0 || Mat[i][j] > 20 ); } } while ( k <= 20 ) { cont = 0 ; for ( i = 0 ; i < m ; i++ ) { for ( j = 0 ; j < n ; j++ ) { if ( Mat[i][j] == k ) { cont++; } } } if ( cont != 0 ) { printf("%d = %d\n",k,cont); } k++; } return 0 ; } 3ª questão Jeito 1 seno = #include <stdio.h> #include <stdlib.h> #include <math.h> int fatorial ( int n ) { int f = 1; while ( n > 0 ) { f= f*n; n--; } return f; } float seno( float x, int p) { float soma = 0, num, den; int i ; for ( i = 0 ; i <= p ; i++ ) { num = pow(-1,i)*pow(x,2*i+1); den = fatorial(2*i+1); soma = soma + num/den; } return soma; } int main() { float x, resultado; int p; printf("Digite o valor de x:\n"); scanf("%f",&x); printf("Digite o valor de p:\n"); scanf("%d",&p); resultado = seno(x,p); printf("O valor da aproximacao do seno eh: %.2f",resultado); return 0; } Jeito 2 seno = int fatorial ( int n ) { int f = 1; while ( n > 0 ) { f= f*n; n--; } return f; } float seno( float x, int p) { float soma = 0, num, den; int i , j = 0 ; for ( i = 1 ; i <= p ; i = i + 2 ) { num =pow(x,i); den = fatorial(i); if (j % 2 == 0 ) { soma = soma + num/den; } else { soma = soma - num/den; } j++; } return soma; } int main() { float x, resultado; int p; printf("Digite o valor de x:\n"); scanf("%f",&x); printf("Digite o valor de p:\n"); scanf("%d",&p); resultado = seno(x,p); printf("O valor da aproximacao do seno eh: %.2f",resultado); return 0; } 2EE 1ª questão typedef struct { char nome[31], autor[21]; int codigo, ano, edicao; } Tlivro; void ImprimirLivro( Tlivro l ) { printf("Nome: %s\n Autor: %s\n Codigo: %d\n Ano %d\n Edicao %d\n",l.nome,l.autor,l.codigo,l.ano, l.edicao); } void BuscaPorAno( int ano, FILE *f) { Tlivro l; f = fopen("Registros.txt","r"); if ( f == NULL ) { printf("O arquivo nao existe!\n"); } else { while ( fscanf(f,"%d",&l.ano) != EOF ) { fscanf(f,"%s %s %d %d",l.nome,l.autor,&l.codigo,&l.edicao); if ( l.ano == ano ) { ImprimirLivro(l); } } } fclose(f); } int main() { int ano; FILE *f; do { printf("Digite o ano a ser procurado :\n"); scanf("%d",&ano); if ( ano > 0 ); { BuscaPorAno(ano,f); } }while(ano <= 0); return 0 ; } Questao 2 #include <stdio.h> #include <stdlib.h> #include <math.h> float CalcularProximo(float x, float p[]) { float xprox, funcao, derivada; funcao = p[0] + p[1]*x + p[2]*pow(x,2) + p[3]*pow(x,3) + p[4]*pow(x,4); derivada = p[1] + 2*p[2]*x + 3*p[3]*pow(x,2) + 4*p[4]*pow(x,3); xprox = x - funcao/derivada; return xprox; } float precisao( float x1, float x2, float e ) { float diferenca, retorno; diferenca = x2 - x1 ; if ( diferenca < 0 ) { diferenca = - diferenca; } if ( diferenca < e ) { retorno = 1; } else { retorno = 0; } return retorno ; } int main() { float x0, e, p[5], xn, prec; int i, n =1 ; for ( i = 0 ; i < 5 ; i++ ) { printf("A%d",i); scanf("%f",&p[i]); } printf("Digite o valor de Epsilon:\n"); scanf("%f",&e); printf("Digite o valor inicial:\n"); scanf("%f",&x0); do { xn = CalcularProximo(x0,p); prec = precisao(x0,xn,e); if ( prec == 0 ) { x0 = xn ; } n++; }while ( prec == 0 && n <= 100 ); printf("O valor da raiz aproximada eh: %.5f\n",xn); return 0; } Questão extra 1 A Área II deseja criar arquivos textos com os dados dos alunos que cursam Computação Eletrônica, para isso ela utiliza a estrutura Aluno que contem um nome (uma string que armazena 30 caracteres) e média (float) de cada aluno do período. Crie a função CriaListaAlunos( Aluno A, FILE *arq) que recebe os dados de um aluno e salva no arquivo “ListaAlunos.txt”. Crie uma função CriaRestoArquivos (FILE *arq1, FILE *arq2, FILE *arq3, FILE *arq4) com base nos dados dos arquivo “ListaAlunos.txt” para criar os arquivos “ListaAprovados.txt”, “ListaFinal.txt”, “ListaReprovados.txt” com base no critério de médias da Área II. No programa principal você deverá declarar os arquivos, solicitar a quantidade de alunos que estão matriculados na disciplina. Para cada alunopreencher os dados na função principal e chamar a função CriaListaAlunos para criar a lista com os dados de todos os alunos, após preencher essa lista leia os seus dados para criar a listas de alunos aprovados, reprovados e que estão na final utilizando a função CriaRestoArquivos. Não utilize variáveis globais! #include <stdio.h> #include <stdlib.h> typedef struct { char nome[31]; float media; }Aluno; void CriaListaAlunos( Aluno A, FILE *arq) { fprintf(arq,"%s %.2f\n",A.nome,A.media); } void CriaRestoArquivos (FILE *arq1, FILE *arq2, FILE *arq3, FILE *arq4) { Aluno A; while ( fscanf(arq1,"%s",A.nome) != EOF ) { fscanf(arq1,"%f",&A.media); if ( A.media >= 7 ) { fprintf(arq2,"%s %.2f\n", A.nome,A.media); } else if ( A.media < 7 && A.media >= 3 ) { fprintf(arq3,"%s %.2f\n", A.nome,A.media); } else { fprintf(arq4,"%s %.2f\n", A.nome,A.media); } } } int main() { Aluno A; FILE *arq1,*arq2,*arq3,*arq4; int qtde,i; printf("Digite a quantidade de alunos:\n"); scanf("%d",&qtde); arq1 = fopen("ListaAlunos.txt","w"); for ( i = 1 ; i <= qtde ; i++ ) { printf("Digite o nome do aluno:\n"); scanf(" %s",A.nome); printf("Digite a media de %s\n",A.nome); scanf("%f",&A.media); CriaListaAlunos(A,arq1); } fclose(arq1); arq1 = fopen("ListaAlunos.txt","r"); arq2 = fopen("ListaAprovados.txt","w"); arq3 = fopen("ListaFinal.txt","w"); arq4 = fopen("ListaReprovados.txt","w"); CriaRestoArquivos(arq1,arq2,arq3,arq4); fclose(arq1); fclose(arq2); fclose(arq3); fclose(arq4); return 0 ; } Questão extra 2 O produtório(∏) de uma sequência corresponde ao produto de p termos de uma sequencia. O exemplo mais comum de produtório é o fatorial de um número. Crie uma função que recebe como parâmetro o valor de p fornecido na função principal e retorne p valor de: Exiba o resultado na tela. Lembre-se que 1 é um número inteiro e i assume valores inteiros, a divisão entre dois números inteiros em C caso gere um número decimal, o valor será apenas a parte inteira, o que pode afetar o resultado do produtório. ½ = 0.5 em C fica apenas 0, pois 1 e 2 são inteiros. Já (1.0)/2 = 0.5, pois 1.0 é float! #include <stdio.h> #include <stdlib.h> #include <math.h> float produtorio (int p) { int i ; float prod = 1; for ( i = 1 ; i <= p ; i++ ) { prod = prod*(1+(1.0)/i); } return prod; } int main() { int p; float resultado; printf("Digite o numero:\n"); scanf("%d",&p); resultado = produtorio(p); printf("Resultado = %.3f\n",resultado); return 0 ; } Crie uma função que recebe um vetor através de um ponteiro e um valor inteiro n (par e maior que 2) que corresponde ao tamanho do vetor troque as metades do vetor. Utilize alocação dinâmica. Preencha o vetor na função principal, mostre o vetor antes e depois. #include <stdio.h> #include <stdlib.h> void troca( int *p , int n ) { int i, aux ; for ( i = 0 ; i < n/2 ; i++ ) { aux = p[i]; p[i] = p[i+n/2]; p[i+n/2] = aux ; } } int main() { int *vet, n,i ; do { printf("Digite a quantidade do vetor:\n"); scanf("%d",&n); if ( n <= 2 || (n % 2 != 0) ) { printf("Valor Inválido!\n"); } }while( n <= 2 || (n % 2 != 0) ); vet = (int*)malloc(n*sizeof(int)); for ( i = 0 ; i < n ; i++ ) { printf("vet[%d]\n",i); scanf("%d",&vet[i]); } for ( i = 0 ; i < n ; i++ ) { printf("%d ",vet[i]); } troca(vet,n); printf("\n"); for ( i = 0 ; i < n ; i++ ) { printf("%d ",vet[i]); } free(vet); return 0 ; } Questões Sugeridas 1) Uma professora germânica de Álgebra Linear da Área II tem em mãos duas listas com dados de cada aluno de suas turmas: a primeira contém o nome, CPF e média e a outra lista contem nome e quantidade de presença do semestre 2013.2. Após almoçar com uma professora de Computação Eletrônica ela deseja implementar as seguintes coisas em C: a) Criar uma função Listas(FILE *arq1, FILE *arq2, Aluno A, Presenca P) que preenche os arquivos “ListadeAlunos.txt” e “PresencadoSemestre.txt” através das seguintes estruturas : Aluno Nome[31] CPF(int) Média(Float) b) Criar uma função que receba os dois arquivos criados no item a para leitura e um terceiro arquivo que será chamado “ListaAprovados.txt”, Aprovados(FILE *arq1, FILE *arq2, FILE *arq3) levando em conta o seguinte critério: Se aluno tiver média >= 7.0 está aprovado; Caso o aluno tenha média >= 6.5 e menor que 7.0 e o aluno tenha 10 ou mais presenças em suas aulas a professora bondosamente colocará 7.0 como média aprovando o aluno. Utilize a biblioteca string.h. strcmp(st1,s2) == 0 verifica se duas strings são iguais.Os arquivos serão declarados na função principal e utilizado como parâmetros de funções, por isso não utilize variáveis globais. 2) Construa um programa em C que peça ao usuário a ordem de uma matriz quadrada de números inteiros num intervalo [2,10], garanta que o usuário não irá digitar um numero fora do intervalo. Utilize alocação dinâmica e crie as seguintes funções a) Função PreencherMatriz(int **mat, int n); b) Função ImprimirMatriz(int **mat, int n) que imprime a matriz c) Função MuliplicarEscalar(int **mat, int k, int n) d) Função Transpor(int **mat , int n) Crie um menu iterativo que permita o usuário escolheras opções: 1- Preencher, 2- Imprimir, 3- Multiplicar por escalar, 4 – Transpor, 0 – Sair. Só deverá sair quando o usuário digitar 0, na opção 3 o usuário deve digitar o valor do escalar k. O valor de n o usuário informar pois representa a ordem da Matriz. Presenca Nome[31] Quantidade (int) 3) Construa duas funções em C que recebem o valor de p como parametro e retornem: O valor de p deve ser informado na função principal, sendo maior que 0 e menor que 10.Ao fim exibir os resultados na tela com 2 casas decimais
Compartilhar