Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Exercicio13.c //Faça um programa que gerencie um vetor de cadastros de até 5 clientes. Cada cadastro deve conter Nome //(até 20 caracteres úteis), Sexo (conterá M ou F) e Estado. O Estado é um ponteiro char que deverá referenciar uma //linha de uma matriz de Strings. Essa matriz de Strings deve armazenar 3 nomes de Estado, um por linha, devendo ser //"Parana", "Santa Catarina" ou "Rio Grande do Sul". O programa deve ter um Menu de opções para Inserir, Remover, //Listar e Sair, onde cada opção deve acionar uma função apropriada. A função Inserir deve inserir um cliente na //posição desejada pelo usuário, e receberá o vetor de cadastros e a matriz de strings por parâmetro. A função Remover, //deve indicar qual posição deve ser removida para remover logicamente um cadastro. A função Listar, mostra apenas os //cadastros existentes. #include <stdio.h> #include <stdlib.h> struct ex_cad{ char nome[21]; char sexo; char *estado; int existe;//caso existe for igual a 1 existe cliente, se for 0 não existe cliente }; int gera_menu()//Funçao responsável por mostrar o menu na tela e retornar a opção selecionada { int op=0; //opções: Inserir, Remover, Listar e Sair printf("\n\t\t1- Para inserir cliente;\n"); printf("\t\t2- Para remover cliente;\n"); printf("\t\t3- Para listar clientes;\n"); printf("\t\t4- Para sair.\n\n"); printf("\tInforme a opcao desejada: "); scanf("%i",&op); return op; } void remover(int n, struct ex_cad cad[n]){// função responsável por remover clientes int x=0; system("cls"); listar(n,cad); printf("\n\t\tInforme o numero do usuario que voce deseja remover: "); scanf("%i",&x); cad[x-1].existe=0; system("cls"); printf("\tRemovido com sucesso!!\n\n\n"); } void inicia_clientes(int n,struct ex_cad cad[n]){//para que no começo nenhum cliente exista int i=0; for (i=0;i<n;i++){ cad[i].existe=0; } } void listar(int n, struct ex_cad cad[n]){ //lista os clientes int i=0; system("cls"); for(i=0;i<n;i++){ if (cad[i].existe==1){ printf("\t\tCliente %i\n", i+1); printf("\tNome: %s\n",cad[i].nome); if (cad[i].sexo=='F' || cad[i].sexo=='f') printf("\tSexo: Feminino\n"); else printf("\tSexo: Masculino\n"); printf("\tEstado: %s\n\n", cad[i].estado); } } } void cadartrar(int n, struct ex_cad cad[n],int m, int f, char est[m][f]){ int i=0, j=0, v=0, e=0; system("cls"); while (i<n && v==0){//encontrando uma posição vazia para add um cliente if (cad[i].existe==0){ v=1; }else{ i++; } } if (i==n){// caso não exista mais posiçoes para se armazenar cliente motra essa mensagem na tela system("cls"); printf("\tINFELIZMENTE NAO EXISTE MAIS ESPACO PARA ADICIONAR CLIENTES!!\n\n"); }else{// se ainda existe espaço para armazenar cliente então ele adiciona o cliente na posição vazia getchar(); printf("\tInforme o nome do usuario: "); gets(&cad[i].nome); printf("\tInforme o sexo do usuario(F - para feminino; M - para masculino: "); scanf("%c",&cad[i].sexo); for(j=0;j<m;j++){ printf("\n\t%i - %s;",j+1, est[j]); } printf("\n\n\tInforme o estado do usuario: "); scanf("%i",&e); cad[i].estado=&est[e-1]; cad[i].existe=1; system("cls"); printf("\tCadastro concluido com sucesso!!\n\n\n"); } } int main() { char estado[3][21]= {{"Parana"},{"Santa Catarina"},{"Rio Grande do Sul"}}; struct ex_cad cadastro[5]; int op=0; inicia_clientes(5,cadastro); printf("\t\t\t SEJA BEM VINDO!\n\n"); op=gera_menu(); while (op!=4){ switch (op){ case 1://Inserir cliente cadartrar(5,cadastro,3, 21,estado); break; case 2://Remover cliente remover(5,cadastro); break; case 3://listar clientes listar(5,cadastro); break; default: break; } op=gera_menu(); } return 0; } Exercicio1.c //Faça uma função que identifique a precisão do computador que está sendo usado através do Épsilon. O valor de Épsilon de máquina de um //sistema pode ser aproximado (a um fator de 2) pelo seguinte algoritmo simplificado abaixo. Dica: usar double e tentar usar o printf //com %g para mostrar número com exponencial. Para comparar o resultado da precisão da sua máquina, veja em http://en.wikipedia.org/wiki/Machine_epsilon //eps=1 //Enquanto (eps+1) > 1 // eps=eps/2 //Fim //eps=eps*2 #include <stdio.h> #include <stdlib.h> double verifica_eps() { double eps=1; while((eps+1)>1){ eps=eps/2; } return eps*2; } int main() { printf("%g",verifica_eps()); return 0; } Exercicio2.c //Dizemos que um número natural é triangular se ele é produto de três números naturais consecutivos. //Exemplo: 120 é triangular, pois 4.5.6 = 120. Dado um inteiro não-negativo n, faça uma função que receba n //por parâmetro e verifique se é triangular retornando 1 em caso afirmativo ou 0 caso contrário. #include <stdio.h> #include <stdlib.h> int verifica_triangular(int n) { int v=0, i=1; while(i<n && v==0){ if(i*(i+1)*(i+2)==n){ v=1; } i++; } return v; } int main() { int n=0; printf("Informe um numero natural: "); scanf("%i",&n); if (verifica_triangular(n)==1){ printf("O numero e triangular!!\n\n"); } else{ printf("O numero nao e triangular!!\n\n"); } return 0; } Exercicio3.c //Criar uma função que receba por parâmetro as coordenadas 3D em double de 2 pontos A =(x_1,y_1,z_1) e B=(x_2,y_2,z_2) //e calcule a distância entre os pontos. A função deve retornar qual é essa distância, sendo que o cálculo da distância entre //os pontos A e B é igual ao módulo do vetor geométrico AB, cuja fórmula é dada por: //Distancia_{A,B}=\sqrt {x^2 + y^2 +z^2} , onde x=x_2-x_1 , y=y_2-y_1, z=z_2-z_1 #include <stdio.h> #include <stdlib.h> #include <math.h> double distancia(double a1,double b1,double c1,double a2,double b2,double c2) { return (sqrt(pow((a2-a1),2)+pow((b2-b1),2)+pow((c2-c1),2))); } int main() { double a1=0, a2=0,a3=0,b1=0,b2=0,b3=0; printf("Informe a condenada A1:"); scanf("%lf", &a1); printf("Informe a condenada A2:"); scanf("%lf", &a2); printf("Informe a condenada A3:"); scanf("%lf", &a3); printf("Informe a condenada B1:"); scanf("%lf", &b1); printf("Informe a condenada B2:"); scanf("%lf", &b2); printf("Informe a condenada B3:"); scanf("%lf", &b3); printf("A distancia entre o ponto A e B e %.1lf\n\n", distancia(a1,a2,a3,b1,b2,b3)); return 0; } Exercicio4.c //Crie uma função A que receba uma matriz de qualquer tamanho (n,m) de números reais já preenchida e um vetor de reais de tamanho //(n x m). Essa função A irá copiar todos os elementos da matriz para esse vetor, linha a linha. Em seguida, elabore uma função B //que receberá por parâmetro esse vetor e mais dois parâmetros reais Maior e Menor por referência. A função B deverá identificar //o maior e o menor valor no vetor e atribuir aos parâmetros Maior e Menor. Mostre no final, o vetor preenchido e o Maior e Menor //valor. #include <stdio.h> #include <stdlib.h> void copia_matriz_p_vetor(int m, int n, int mat[m][n], int v[m*n]) { int i=0,j=0, k=0; for(i=0; i<m; i++){ for (j=0; j<n; j++){ v[k++]=mat[i][j]; } } } void encontra_maior_menor (int *maior, int *menor, int x,int v[x]){ int i=0; *maior =v[0]; *menor =v[0]; for(i=1; i<x; i++){ if (*maior<v[i]){ *maior=v[i]; } if (*menor>v[i]){ *menor=v[i]; } } } int main() { int m=0, n=0,i=0, j=0, maior=0, menor=0; printf("Informe numero de linhas da matriz: "); scanf("%i",&m); printf("Informe numero de colunas da matriz: "); scanf("%i",&n); int mat[m][n], vet[m*n]; for(i=0; i<m; i++){ for (j=0; j<n; j++){ printf("Informe numero %ix%i da matriz: ", i+1, j+1); scanf("%i",&mat[i][j]); } } copia_matriz_p_vetor(m,n,mat,vet); encontra_maior_menor(&maior, &menor,m*n,vet); printf("O maior numero e %i e o menor numero e %i!\n\n", maior, menor); return 0; } Exercicio5.c //Faça uma função que receba por parâmetro uma matriz de reais M (n x m) vazia e um Vetor de reais de tamanho (n) já preenchido. //A função deve gerar em M uma matriz de Vandermonde seguindo a seguinte formulação: //Matriz_{(i,j)}=(Vetor_{(i)})^j , onde i e j iniciam em 0. Abaixo um exemplo de uma matriz M (5x10) e o vetor de reais {1,2,3,4,5} #include <stdio.h> #include <stdlib.h> #include <math.h> void matriz_Vandermonde(int n, int m,double mat[n][m], double v[n]) { int i=0,j=0; for (i=0;i<n;i++){ for(j=0;j<m;j++){ mat[i][j]=pow(v[i],j); } } } int main() { int m=0, n=0,i=0, j=0; printf("Informe numero de linhas da matriz: ");//recebendo o numero de linhas da matriz scanf("%i",&m); printf("Informe numero de colunas da matriz: ");//recebendo o numero de colunas da matriz scanf("%i",&n); double mat[m][n], vet[m]; for(i=0; i<m; i++){//recebendo os valores do vetor printf("Informe numero %i do vetor: ", i+1); scanf("%lf",&vet[i]); } matriz_Vandermonde(m,n,mat,vet);//chamando a função for(i=0; i<m; i++){//mostrando na tela a matriz for (j=0; j<n; j++){ printf("\t %.0lf",mat[i][j]); } printf("\n"); } return 0; } Exercicio6.c //Faça uma função para receber uma matriz quadrada n de números reais por parâmetro e gerar nela uma matriz de Hilbert, //que segue a seguinte formulação: H_{(i,j)}=\frac{1}{i+j-1} , onde i,j=1...n . Dica: pode ser necessário fazer casting //(pesquisar...). #include <stdio.h> #include <stdlib.h> void matriz_Hilbert(int n,double m[n][n]) { int i=0,j=0; for (i=0;i<n;i++){ for(j=0;j<n;j++){ m[i][j]=(double)1/((i+1)+(j+1)-1); } } } int main() { int n=0,i=0, j=0; printf("Informe o tamanho da matriz: ");//recebendo o tamanho da matriz scanf("%i",&n); double mat[n][n];//criando a matriz matriz_Hilbert(n,mat);//chamando a função for(i=0; i<n; i++){//mostrando na tela a matriz for (j=0; j<n; j++){ printf("\t %lf",mat[i][j]); } printf("\n"); } return 0; } Exercicio7.c //Analise a matriz abaixo e identifique uma lógica para sua criação. Elabore uma função que preencha uma matriz 8x8 //passada por parâmetro a partir da lógica identificada. #include <stdio.h> #include <stdlib.h> void triangulo_de_pascal(int n,int m[n][n]) { int i=0,j=0; for (i=0;i<n;i++){ for(j=0;j<n;j++){ if (i==0){//caso for uma das posiçoes da primeira linha preenche com 0. m[i][j]=0; } if (j==0){//caso for uma das posiçoes da primeira coluna preenche com 1. m[i][j]=1; } if (i!=0 && j!=0){//caso contrario o elemento sera: elemento de l e c anterior + elemento de mesma c e l anterior. m[i][j]=m[i-1][j-1]+m[i-1][j]; } } } } int main() { int i=0, j=0, mat[8][8]; triangulo_de_pascal(8,mat);//chamando a função for(i=0; i<8; i++){//mostrando na tela a matriz for (j=0; j<8; j++){ printf("\t %i",mat[i][j]); } printf("\n"); } return 0; } Exercicio8.c //A partir do exemplo da matriz diamante abaixo (15x15) identifique uma lógica de criação. Defina uma função que receba //uma matriz quadrada de qualquer tamanho por parâmetro e gere nela uma matriz diamante: #include <stdio.h> #include <stdlib.h> void matriz_diamante(int x, char m[x][x]) { int i=0, j=0; for (i=0;i<x;i++){ for(j=0;j<x;j++){ if(i>(x-1)/2){ m[i][j]=m[(x-1)-i][j]; }else{ if(j==((x-1)/2)+i || j==((x-1)/2)-i){ m[i][j]='#'; } else{ m[i][j]=' '; } } } } } int main() { int t=0, i=0,j=0; printf("Informe o tamanho da matriz: "); scanf("%i",&t); char m[t][t]; matriz_diamante(t,m); for (i=0;i<t;i++){//imprimindo a matriz for(j=0;j<t;j++){ printf("%c",m[i][j]); } printf("\n"); } return 0; } Exercicio9.c //Crie uma função recursiva que verifique se um número recebido por parâmetro é primo (retornando 1 em caso afirmativo) ou //(0 em caso negativo). #include <stdio.h> #include <stdlib.h> int verifica_primo(int n, int d) { if(d>=1) { if (n==d) //se for a primeira função recursiva (n será divisivel por d) { if(verifica_primo(n,d-1)<=1)//testa se existe apenas um divisor além do proprio numero return 1; else return 0; } else// quando as funçoes estão no meio do sanduiche (retorna o numero de divisores { if (n%d==0) return (1+ verifica_primo(n,d-1)); else return (0+ verifica_primo(n,d-1)); } } else return 0; } int main() { int r=0, n=0; printf("Informe um numero: "); scanf("%i",&n); r=verifica_primo(n,n); if(r==1) { printf("\nO numero e primo!!\n\n"); } else { printf("\nO numero nao e primo!!\n\n"); } return 0; } Exercicio10.c //Faça uma função recursiva que retorne o n-ésimo termo da sequência de Fibonacci, sendo que n é recebido por parâmetro. //Utilize essa função para desenvolver um programa que mostre os n termos dessa sequência na tela, a partir do valor de n // recebido pelo teclado. #include <stdio.h> #include <stdlib.h> int sequencia_fibonacci(int n) { int i=0,j=0, m[n][n], s=0; if (n>=1){ sequencia_fibonacci(n-1); for (i=0;i<n;i++){//contruindo o triangulo de pascal for(j=0;j<n;j++){ if (i==0) m[i][j]=0; if (j==0) m[i][j]=1; if (i!=0 && j!=0) m[i][j]=m[i-1][j-1]+m[i-1][j]; } } for (i=0;i<n;i++){//encontrando o n-esimo termo da sequencia apartir da diagonal secundária da matriz m for(j=0;j<n;j++){ if (i+j==n-1) s=s+m[i][j]; } } printf("%i ",s); return s; }else{ return 1; } } int main() { int n_esimo=0; n_esimo=sequencia_fibonacci(10); printf("\nO e-nesimo termo da sequencia e: %i\n\n", n_esimo); return 0; } Exercicio11.c //Crie uma função recursiva que identifique o MDC utilizando o Algoritmo de Euclides: //MDC_{(a,b)} = MDC_{(b,r)} , onde r é o resto da divisão de a por b. //Repete-se esse procedimento sucessivamente até r == 0, indicando uma divisão exata entre b e r #include <stdio.h> #include <stdlib.h> int algoritmo_euclides(int a, int b) { if(a%b>0){ return algoritmo_euclides(b,a%b); } return b; } int main() { int a=0, b=0; printf("Informe o primeiro numero: "); scanf("%i", &a); printf("Informe o segundo numero: "); scanf("%i", &b); printf("O MDC dos numeros informados e %i\n", algoritmo_euclides(a,b)); return 0; } Exercicio12.c //Elabore um programa para gerenciar um cadastro de 6 candidatos a um sorteio. Cada candidato possui Nome, Idade, //Total_Sorteado. Os cadastros serão preenchidos a partir de uma função para isso, recebendo por parâmetro o vetor //para armazenar o cadastro a ser preenchido. Elabore outra função que, receba o vetor de cadastros por parâmetro, //e realizará 10 sorteios de candidatos a partir de um dado de 6 faces (lados: 1,2,3,4,5,6). A cada sorteio do dado, //deve-se aumentar o valor do Total_sorteado do respectivo candidato. Após os 10 sorteios, deve-se mostrar qual o //candidato sorteado mais vezes na tela. Para realizar o sorteio, pesquise o uso da função rand(). Abaixo estão algumas dicas: //- Para inicializar o gerador de números aleatórios, usar srand(time(NULL)); //- Para gerar aleatoriamente um número de 1 a 6, usar variavel_dado = 1+rand()%6; #include <stdio.h> #include <stdlib.h> #include <time.h> struct ex_cadastro{ char nome[21]; int idade; int total_sorteado; }; void sorteio(int n, struct ex_cadastro cad[n])//função que sorteia os numeros { int i=0, x=0; srand(time(NULL));//inicializa o sorteio for (i=0;i<10;i++){ x=1+rand()%6;//função que sorteia de 1 até 6 cad[x-1].total_sorteado=cad[x-1].total_sorteado+1;//n-1 pq o sorteio vai de 1 a 6 e o vetor de 0 a 5 } } void preenche_cadastros(int n, struct ex_cadastro cad[n])//funçao responsável por fazer o preenchimento dos cadastros { int i=0; for(i=0;i<n;i++){ printf("Informe o nome do candidato %i: ",i+1); gets(&cad[i].nome); printf("Informe a idade do candidato %i: ",i+1); scanf("%i", &cad[i].idade); getchar(); cad[i].total_sorteado=0;//todos recebe zero pq ninguem foi sorteado ainda } } int main() { int i=0, s=0; struct ex_cadastro cadastro[6]; preenche_cadastros(6,cadastro); sorteio(6,cadastro); for(i=0;i<6;i++){//verifica quem foi mais vezes sorteado if(cadastro[s].total_sorteado<cadastro[i].total_sorteado){ s=i; } } printf("A pessoa sorteada foi:%s com %i pontos de 10\n\n", cadastro[s].nome,cadastro[s].total_sorteado); return 0; }
Compartilhar