Você está na página 1de 4

Universidade Federal de Santa Catarina

Departamento de Engenharia Eltrica


Laboratrio

Aula 07
Ponteiros

Disciplina:ComputaoCientficaIEEL7021
Turmas:2202(A,B)
Professor:SamirAhmadMussa.

Atividades:
1. Programa: aplicaes de ponteiros
#include <stdio.h>
#include <stdlib.h>
//Prottipos
void copy1( char *, const char *);
void copy2( char *, const char *);
//Funo principal
int main()
{
//Declarao e inicializao das Strings
char string1[10], *string2 = "Olah !",
string3[10], string4[] = "Ateh logo.";
copy1(string1,string2);
printf("string1 = %s\n", string1);
copy2(string3,string4);
printf("string3 = %s\n", string3);
system("PAUSE");
return 0;
}
void copy1(char *s1, const char *s2)
{
int i;
for(i=0; s1[i]=s2[i]; i++)
{}
/*Toda instruo para a realizao da funo est na prpria
declarao do lao for:
- inicializa o contador "i";
- condio: "s1[i]=s2[i]" atribui o valor de s2[i] a s1[i]. O
lao for executado enquanto essa condio verdadeira. Essa
passa a ser falsa quando s2[i] igual a '\0' (fim da string);
- incrementa o contador "i".*/
}
void copy2(char *s1, const char *s2)
{
for(; *s1=*s2; s1++, s2++)
{}
/*Toda instruo est na declarao do lao for:
- no variveis para inicializar;
- condio: "*s1=*s2" atribui o contedo do endereo apontado
por s2 ao endereo apontado por s1. De forma anloga funo
"copy1", o lao executado at que '\0' seja encontrado;
- incremento: "s1" e "s2" apontam para os prximos caracteres.*/
}

2. Programa: ponteiros para funes


#include <stdio.h>
#include <stdlib.h>

#define TAMANHO 10
void bolha(int *, const int, int(*)(int,int));
/*int (*)(int,int) = ponteiro para uma funo do tipo inteiro
que recebe dois inteiros como argumentos.*/
int ascendente(const int,const int);
int descendente(const int,const int);
int main()
{
int a[TAMANHO] = {2, 6, 4, 8, 10, 12, 89, 68, 45, 37 };
int contador, ordem;
printf("Digite 1 para ordem ascendente. \n");
printf("Digite 2 para ordem descendente. \n ");
scanf("%d",&ordem);
printf("\nOrdem original: \n");
for(contador = 0; contador<=TAMANHO-1; contador++)
printf("%4d",a[contador]);
if(ordem ==1)
{
bolha(a,TAMANHO, ascendente);
printf("\nOrdem ascendente: \n");
}
else
{
bolha(a,TAMANHO, descendente);
printf("\nOrdem descendente: \n");
}
for(contador = 0; contador<=TAMANHO - 1; contador++)
printf("%4d",a[contador]);
printf("\n");
system("PAUSE");
return 0;
}
//Declarao da funo "bolha" - organiza o vetor
void bolha(int *aux,const int tamanho,int (*compara)(int,int))
{
int cont1, cont2;
void troca(int *, int *);
for(cont1=1; cont1<=tamanho-1; cont1++)
for(cont2=0; cont2<=tamanho-2; cont2++)
if ((*compara)(aux[cont2],aux[cont2+1]))
troca(&aux[cont2],&aux[cont2+1]);
/*Se a funo "compara" retornar verdadeiro (!=0), realizada
a troca entre o elemento da posio atual e o seguinte.*/
}
//Declarao da funo "troca"
void troca(int *valor1Ptr, int *valor2Ptr)
{
int temp;
temp = *valor1Ptr;
*valor1Ptr = *valor2Ptr;
*valor2Ptr = temp;
}

//Funo "ascendente"
int ascendente(const int a, const int b)
{
return b<a;
/*Retorna 0 (falso) se a condio no for satisfeita,

caso contrrio retorna 1.*/


}
//Funo "descendente"
int descendente(const int a, const int b)
{
return b>a;
}

3. Programa: array de ponteiros


#include <stdio.h>
#include <stdlib.h>
void funcao1(int);
void funcao2(int);
void funcao3(int);
int main()
{
void (*f[3])(int) = {funcao1, funcao2, funcao3};
/*"void (*f[3])(int)" declara um array de tamanho 3.
Os elementos desse array so ponteiros para as funes,
que so do tipo void e recebem um inteiro como argumento.*/
int opcao;
printf("Digite um numero: ");
scanf("%d", &opcao);
while( opcao>=0 && opcao<3)
{
(*f[opcao])(opcao);
//Chama a funo conforme "opcao".
printf("\n\nDigite um numero: ");
scanf("%d", &opcao);
}
printf("\n");
system("PAUSE");
return 0;
}
void funcao1(int x)
{
printf("Voce digitou %d e entrou na funcao um",x);
}
void funcao2(int x)
{
printf("Voce digitou %d e entrou na funcao dois",x);
}
void funcao3(int x)
{
printf("Voce digitou %d e entrou na funcao tres",x);
}

Exerccios:
1. Utilizando ponteiros, escreva um programa que solicite a dimenso de duas matrizes
(A e B com dimenso mxima 10x10) e logo aps permita a entrada dos elementos
de cada uma. A seguir apresentado um menu com as seguintes operaes: (1)
A+B; (2) A*B e (3) A (transposto). A opo (4) possibilita a visualizao de um
elemento da matriz A, para a linha e a coluna desejada. A opo (0) finaliza o
programa. Caso uma operao no seja possvel, avisar o usurio. Aps cada
operao apresente o resultado. Encapsule cada rotina em uma funo especfica.
Todas as passagens de parmetros devem ser realizadas atravs de ponteiros.

Você também pode gostar