Baixe o app para aproveitar ainda mais
Prévia do material em texto
Prof. Edson J. R. Justino Prof. Claudio Carvilhe Parte 2 Pontifícia Universidade Católica do Paraná - PUCPR Ponteiro � Em C, podemos armazenar em uma variável o endereço de uma outra variável. Para isso, devemos declarar esta variável como um apontador ou ponteiro. � Na maneira abaixo, declaramos que pc é um apontador para uma variável do tipo char. Ex.: char *pc; Ponteiros � Em C, existe uma maneira para referenciar diretamente os endereços das variáveis, através do operador &. Ex.: void main( ){ int x, *px; . . x = 203; . . px = &x; } . . . . . . Memória px 0100 0101 0001 0102 0103 0104 n x 0102 203 Exemplo /***************************************** Exemplo do Uso de ponteiros *****************************************/ #include <stdio.h> void main( ) { int x = 10, y, *px; px = &x; y = *px + 1; printf("conteudo de y = %d / endereco de y = %d\n",y,&y); printf("conteudo de x = %d / endereco de x = %d\n",x,&x); printf("px = %d\n",px); system("PAUSE"); } Ponteiros e Funções #include <stdio.h> #include <stdlib.h> int pos_neg (int); int main(int argc, char *argv[]) { int valor, sinal; puts("Entre com um valor inteiro positivo ou negativo"); scanf("%d", &valor); fflush(stdin); sinal = pos_neg(valor); if (sinal != 0) puts(" O valor e positivo\n"); else puts(" O valor e negativo\n"); system("PAUSE"); return 0; } // funçao testa sinal int pos_neg (int val){ if (val < 0) return 0; else return 1; } Ponteiros e Funções // função testa sinal int pos_neg (int *val){ if (*val < 0) return 0; else return 1; } #include <stdio.h> #include <stdlib.h> int pos_neg (int*); int main(int argc, char *argv[]) { int valor, sinal; puts("Entre com um valor inteiro positivo ou negativo"); scanf("%d", &valor); fflush(stdin); sinal = pos_neg(&valor); if (sinal != 0) puts(" O valor e positivo\n"); else puts(" O valor e negativo\n"); system("PAUSE"); return 0; } Ponteiros e Funções #include <stdlib.h> int soma_intervalo (int, int); int main(int argc, char *argv[]) { int valor_1, valor_2, resultado; puts("entre com o primeiro valor"); scanf("%d", &valor_1); fflush(stdin); puts("entre com o segundo valor"); scanf("%d", &valor_2); fflush(stdin); // chamada da fubnção resultado = soma_intervalo( valor_1, valor_2); printf("A soma dos elementos do intervalo e: %d\n", resultado); system("PAUSE"); return 0; } // soma valores do intervalo int soma_intervalo (int val_1, int val_2){ int i, soma = 0; if (val_1 >= val_2) return soma; else{ for (i = val_1+1; i< val_2; i++) soma += i; return soma; } } Ponteiros e Funções #include <stdlib.h> int soma_intervalo (int *, int *); int main(int argc, char *argv[]) { int valor_1, valor_2, resultado; puts("entre com o primeiro valor"); scanf("%d", &valor_1); fflush(stdin); puts("entre com o segundo valor"); scanf("%d", &valor_2); fflush(stdin); // chamada da fubnção resultado = soma_intervalo( &valor_1, &valor_2); printf("A soma dos elementos do intervalo e: %d\n", resultado); system("PAUSE"); return 0; } // soma valores do intervalo int soma_intervalo (int *val_1, int *val_2){ int i, soma = 0; if (*val_1 >= *val_2) return soma; else{ for (i = (*val_1)+1; i< (*val_2); i++) soma += i; return soma; } } Ponteiros e Funções #include <stdio.h> #include <stdlib.h> int soma_intervalo(int, int, int); int main(int argc, char *argv[]){ int valor_1, valor_2, valor_3, result; puts("Entre com o primeiro valor"); scanf("%d", &valor_1); fflush(stdin); puts("Entre com o segundo valor"); scanf("%d", &valor_2); fflush(stdin); puts("Entre com o terceiro valor"); scanf("%d", &valor_3); fflush(stdin); // chamada da função result = soma_intervalo(valor_1, valor_2, valor_3); printf(" A soma do intervalo e: %d\n", result); system("PAUSE"); return 0; } // Soma valor do intervalo int soma_intervalo(int a, int b, int c){ int i, soma = 0; if (b >= c) return soma; else{ for (i = b; i<= c; i++){ if ((i%a) == 0) soma += i; } return soma; } } Ponteiros e Funções #include <stdio.h> #include <stdlib.h> int soma_intervalo(int *, int *, int *); int main(int argc, char *argv[]){ int valor_1, valor_2, valor_3, result; puts("Entre com o primeiro valor"); scanf("%d", &valor_1); fflush(stdin); puts("Entre com o segundo valor"); scanf("%d", &valor_2); fflush(stdin); puts("Entre com o terceiro valor"); scanf("%d", &valor_3); fflush(stdin); // chamada da função result = soma_intervalo(&valor_1, &valor_2, &valor_3); printf(" A soma do intervalo e: %d\n", result); system("PAUSE"); return 0; } // Soma valor do intervalo int soma_intervalo(int *a, int *b, int *c){ int i, soma = 0; if (*b >= *c) return soma; else{ for (i = *b; i<= *c; i++){ if ((i% *a) == 0) soma += i; } return soma; } } Ponteiros e Funções #include <stdio.h> #include <stdlib.h> int calc_segundos(int, int, int); int main(int argc, char *argv[]){ int h, m, s, m_segundos; puts("Entre com a hora"); scanf("%d", &h); fflush(stdin); puts("Entre com o minuto"); scanf("%d", &m); fflush(stdin); puts("Entre com o segundo"); scanf("%d", &s); fflush(stdin); // chamada da função m_segundos = calc_segundos(h, m, s); printf(" O total de segundos e: %d\n", m_segundos); system("PAUSE"); return 0; } // converte em segundos int calc_segundos(int hora, int min, int seg){ int soma = 0; //Converte hora em minutos soma = hora*60; //Converte minutos em segundos soma = soma*60 + min*60; //Calcula total de segundos soma = soma + seg; return soma; } Ponteiros e Funções #include <stdio.h> #include <stdlib.h> int calc_segundos(int *, int *, int *); int main(int argc, char *argv[]){ int h, m, s, m_segundos; puts("Entre com a hora"); scanf("%d", &h); fflush(stdin); puts("Entre com o minuto"); scanf("%d", &m); fflush(stdin); puts("Entre com o segundo"); scanf("%d", &s); fflush(stdin); // chamada da função m_segundos = calc_segundos(&h, &m, &s); printf(" O total de segundos e: %d\n", m_segundos); system("PAUSE"); return 0; } // converte em segundos int calc_segundos(int *hora, int *min, int *seg){ int soma = 0; //Converte hora em minutos soma = *hora*60; //Converte minutos em segundos soma = soma*60 + *min*60; //Calcula total de segundos soma = soma + *seg; return soma; } Ponteiros e Funções #include <stdio.h> #include <stdlib.h> void calcula_hora (int); int main(int argc, char *argv[]) { int segundos; puts(" Entre com o valor em segundos"); scanf("%d", &segundos); fflush(stdin); calcula_hora(segundos); system("PAUSE"); return 0; } // função que converte segundos // em horas:minutos:segundos void calcula_hora (int seg){ int h, m, s, r; h = seg / 3600; r = seg % 3600; m = r / 60; s = r % 60; printf("%d:%d:%d\n",h,m,s); } Ponteiros e Funções #include <stdio.h> #include <stdlib.h> void calcula_hora (int *, int *, int *, int *); int main(int argc, char *argv[]) { int hora, min, seg; int segundos; puts(" Entre com o valor em segundos"); scanf("%d", &segundos); fflush(stdin); calcula_hora(&segundos, &hora, &min, &seg); printf("%d:%d:%d\n",hora,min,seg); system("PAUSE"); return 0; } // função que converte segundos // em horas:minutos:segundos void calcula_hora (int *seg, int *h, int *m, int *s){ int r; *h = *seg / 3600; r = *seg % 3600; *m = r / 60; *s = r % 60; } Ponteiros e Funções #include <stdio.h> #include <stdlib.h> int verifica (int); int main(int argc, char *argv[]) { int valor, resultado; puts(" Entre com valor inteiro de quatro digitos"); scanf("%d", &valor);fflush(stdin); resultado = verifica(valor); if (resultado == 1) puts("A regra vale!\n"); else puts(" A regra nao vale!\n"); system("PAUSE"); return 0; } // função determina regra int verifica (int numero){ int primeiro, segundo, soma, quadrado; //separa as duas parte do número primeiro = numero / 100; segundo = numero % 100; // determina característica soma = primeiro + segundo; quadrado = soma*soma; if (quadrado == numero) return 1; else return 0; } Ponteiros e Funções #include <stdio.h> #include <stdlib.h> int verifica (int *); int main(int argc, char *argv[]) { int valor, resultado; puts(" Entre com valor inteiro de quatro digitos"); scanf("%d", &valor); fflush(stdin); resultado = verifica(&valor); if (resultado == 1) puts("A regra vale!\n"); else puts(" A regra nao vale!\n"); system("PAUSE"); return 0; } // função determina regra int verifica (int *numero){ int primeiro, segundo, soma, quadrado; //separa as duas parte do número primeiro = *numero / 100; segundo = *numero % 100; // determina característica soma = primeiro + segundo; quadrado = soma*soma; if (quadrado == *numero) return 1; else return 0; } Ponteiros e Vetores � Ponteiros também podem ser usados para a manipulação de vetores de qualquer tipo dos dados básicos (char, int, float, ...) � Exemplo char vetor[100]; char *p_vetor; p_vetor = vetor; ou p_vetor = &vetor[0]; Ponteiros e Vetores #include <stdio.h> #include <stdlib.h> // Funções para manipulação de vetores int ler_vetor(int *); void imprime_vetor(int *); #define MAX 10 int main(int argc, char *argv[]){ int vetor[MAX], erro=1; erro = ler_vetor(vetor); if (erro != 0) puts("Erro na leitura do vetor\n"); else imprime_vetor(&vetor[0]); system("PAUSE"); return 0; } // Função para leitura do vetor de inteiros int ler_vetor(int *vet){ int i; puts(" Entre com os valores do vetor\n"); for (i=0; i< MAX; i++){ printf("Vetor[%d]= ", i); scanf("%d",(vet+i)); } return 0; } // Função para imprimir o vetor de inteiros void imprime_vetor (int *vet){ int i; printf(" Vetor= "); for (i=0; i< MAX; i++) printf("%d, ",*(vet+i)); printf("\n"); } Ponteiros e Vetores #include <stdio.h> #include <stdlib.h> // Funções para manipulação de vetores int ler_vetor(int *); void imprime_vetor(int *); #define MAX 10 int main(int argc, char *argv[]){ int vetor[MAX], erro=1; erro = ler_vetor(vetor); if (erro != 0) puts("Erro na leitura do vetor\n"); else imprime_vetor(&vetor[0]); system("PAUSE"); return 0; } // Função para leitura do vetor de inteiros int ler_vetor(int *vet){ int i; puts(" Entre com os valores do vetor\n"); for (i=0; i< MAX; i++){ printf("Vetor[%d]= ", i); scanf("%d",&vet[i]); } return 0; } // Função para imprimir o vetor de inteiros void imprime_vetor (int *vet){ int i; printf(" Vetor= "); for (i=0; i< MAX; i++) printf("%d, ",vet[i]); printf("\n"); } Ponteiros e Vetores � Exercícios � Modifique o programa anterior e inclua uma função que some os componentes do vetor que sejam pares. Ao final, imprima além do vetor, o somatório desses componentes. Ponteiros e Matrizes � Ponteiros também podem ser usados para a manipulação de matrizes de qualquer dimensão e de qualquer tipo dos dados básicos (char, int, float, ...) � Exemplo char matriz[100][50]; char *p_matriz; p_matriz = matriz; ou p_vetor = &matriz[0]; Ponteiros e Matrizes #include <stdio.h> #include <stdlib.h> // Funções para manipulação de matrizes int ler_matriz(float *); void imprime_matriz(float *); #define LINHA 2 #define COLUNA 2 int main(int argc, char *argv[]){ float matriz[LINHA][COLUNA]; int erro=1; erro = ler_matriz(matriz); if (erro != 0) puts("Erro na leitura da matriz\n"); else imprime_matriz(&matriz[0][0]); system("PAUSE"); return 0; } // Função para leitura do vetor de inteiros int ler_matriz(float *mat){ int i,j; puts(" Entre com os valores da matriz\n"); for (i=0; i<LINHA; i++) for (j=0; j<COLUNA; j++){ printf("Matriz[%d][%d]= ", i,j); scanf("%f",mat+(i*COLUNA+j)); } return 0; } // Função para imprimir o vetor de inteiros void imprime_matriz(float *mat){ int i, j; printf(" Matriz \n"); for (i=0; i<LINHA; i++){ for (j=0;j<COLUNA; j++) printf("%.1f ", *(mat+(i*COLUNA+j))); printf("\n"); } } Ponteiros e Matrizes � Exercícios � Elabore um programa em C que efetua a alocação dinâmica de matrizes, com base na escolha do usuário (o usuário deve informar o número de LINHAS E COLUNAS). A partir disto, seu programa deve obter DUAS MATRIZES, informadas pelo usuário. E exibir como resultado: ○ SOMA ENTRE AS MATRIZES; ○ SUBTRAÇÃO ENTRE AS MATRIZES; ○ MULTIPLICAÇÃO ENTRE A MATRIZ E UM ESCALAR; ○ CÁLCULO DA DIAGONAL DAS MATRIZES (em separado).
Compartilhar