Sei sulla pagina 1di 13

Ponteiros

Exerccio 1. Criar um programa que preencha um vector de estruturas, onde cada estrutura deve guardar o nome, a idade, o salrio e a data de contrato dos funcionrios de uma empresa.

#include <stdio.h> #define DIM 5 typedef struct { int dia; char mes[ 4 ]; int ano; } DATA; typedef struct { char nome[50]; int idade; DATA contrato; float salario; } PESSOA; PESSOA pessoal [DIM];

MRibeiro

202

Ponteiros

int preencher( PESSOA vec[DIM]) { int i=0; char resp; do { clrscr(); printf ("Nome: "); printf("Idade: "); printf(Data de contrato: ); gets(vec[ i ].nome); scanf(%d, &(vec[ i ].idade)); scanf(%d %s %d, &(vec[ i ].contrato.dia), vec[ i ].contrato.mes, &(vec[ i ].contrato.ano)); fflush(stdin); printf("Salario: "); i++; printf ("\nDeseja continuar (s/n)> "); scanf(%c, &resp); return i; } fflush(stdin); } while ((resp != n) && (resp!=N) && (i<DIM-1)); scanf(%d, &(vec[ i ].salario)); fflush(stdin); fflush(stdin);

MRibeiro

203

Ponteiros

void mostrar( PESSOA vec[DIM], int num) { int i = 0; clrscr(); for (i=0; i<num; i++) { printf (" \n\n\nNome: %s",vec[ i ].nome); printf("\nIdade: %d ", vec[ i ].idade);
printf(\nData de contrato: %d %s %d, vec[ i ].contrato.dia, vec[ i ].contrato.mes, vec[ i ].contrato.ano);

printf("\nSalario: %f", vec[ i ].salario)); } } void main ( ) { int k=preencher(pessoal); mostrar(pessoal, k); }

MRibeiro

204

Ponteiros

Exerccio 2.Com base no exemplo do exerccio 1, crie uma funo para calcular o total mensal de remuneraes.
float total_mensal_A(PESSOA vec[DIM], int num) { int i = 0; float soma =0; for (i=0; i<num; i++) soma += vec[i].salario; return soma; } void total_mensal_B(PESSOA vec[DIM], int num, float *total) { int i = 0, soma = 0; *total=0; for (i=0; i<num; i++) soma += vec[i].salario; *total = soma; }

MRibeiro

205

Ponteiros

void main ( ) { float remun1=0, remun2=0; int k=preencher(pessoal); remun1=total_mensal_A(pessoal, k); total_mensal_B(pessoal, k, &remun2); printf("\nSalario: %6.2f", remun1); printf("\nSalario: %6.2f", remun2); getch(); }

MRibeiro

206

Ponteiros

Exerccio 3.Com base no exemplo do exerccio 1, crie uma funo encontrar e listar todas as pessoas cujo ms de contrato Jan (Janeiro).
void mes_contrato( PESSOA vec[DIM], int num, char mes_ren[4]) { int i = 0, total=0; printf("Funcionarios cujo contrato termina em %s\n", mes_ren); for (i=0; i<num; i++) if (!stricmp(vec[i].contrato.mes, mes_ren)) { printf("\nNome: %s",vec[i].nome); printf("\nData de contrato: %d %s %d", vec[i].contrato.dia, vec[i].contrato.mes, vec[i].contrato.ano); total++; } printf("\n\nTotal: %d",total); }

MRibeiro

207

Ponteiros

void main ( ) { int k=preencher(pessoal); clrscr(); mes_contrato(pessoal, k, "Jan"); getch(); }

MRibeiro

208

Ponteiros

Exerccio 4.Com base no exemplo do exerccio 1, crie uma funo encontrar o funcionrio que aufere o ordenado mais elevado.
int top_ganha( PESSOA vec[DIM], int num) { int i = 0, ind=-1; float maior = 0; for (i=0; i<num; i++) if (vec[i].salario>maior) { ind=i; maior= vec[i].salario; } printf("\n\nO funcionrio que aufere o salrio mais elevado e: %s, %6.2f euros, vec[ind].nome,vec[ind].salario ); return ind; }

MRibeiro

209

Ponteiros

Exerccio 5.Construa um programa que leia uma frase do teclado, guarde-a num vector e crie um outro vector com a referida frase escrita ao contrrio.
#include <stdio.h> void main () { char fraseA[100], fraseB[100]; char *apontadorA =NULL, *apontadorB=NULL; clrscr(); printf("Introduza uma frase: "); gets(fraseA); apontadorA=fraseA; apontadorB=fraseB; if (*apontadorA=='\0') printf("Frase vazia"); else{

MRibeiro

210

Ponteiros

while (*apontadorA!='\0') apontadorA++; apontadorA - -; while (apontadorA>=fraseA) { *apontadorB=*apontadorA; apontadorA - -; apontadorB++; } *apontadorB = \0; } /*else*/ printf(Frase B: %s, fraseB); getch(); }

MRibeiro

211

Ponteiros

Exemplo
MRibeiro 212

Ponteiros

#include <stdio.h> #define DIM 5 void soma ( float *resultado, float vec[DIM]) { int i; float res; for ( i=0; i < DIM; i++ ) res+= vec[ i ]; *resultado = res; } void main ( ) { int remuneracoes [DIM] = { 11342.7, 995.3, 899.9, 1456.1, 2001.4} ; float rem_total; soma (&rem_total, remuneracoes); printf (O montante despendido em remuneracoes e %6.2f, rem_total); }
A funo soma tem dois parmetros: um ponteiro para um float e um vector.

Exemplo
MRibeiro 213

Ponteiros

#include <stdio.h> #define DIM 5 float soma ( float vec[DIM]) { int i; float res; for ( i=0; i < DIM; i++ ) res+= vec[ i ]; return res; } void main ( ) {

A funo soma tem apenas um argumento: um vector.

int remuneracoes [DIM] = { 11342.7, 995.3, 899.9, 1456.1, 2001.4} ; printf (O montante despendido em remuneracoes e % 6.2f, soma ( remuneracoes)); }

MRibeiro

214