A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

– coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré Universidade Tecnológica Federal.

Apresentações semelhantes


Apresentação em tema: "– coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré Universidade Tecnológica Federal."— Transcrição da apresentação:

1 – coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré Universidade Tecnológica Federal do Paraná – Campus Campo Mourão COINT - Coordenação do Curso Superior de Tecnologia em Sistemas para Internet Introdução à Programação usando Linguagem C

2 – coinf.cm.utfpr.edu.br 2 Aulas adaptadas dos materiais... Do. Prof. Rogério Aparecido Gonçalves –http://coinf.cm.utfpr.edu.br/docentes/rogerioag Do Prof. Leandro Galvão –www.dcc.ufam.edu.br/~galvao/ De Allan Diego Silva Lima –http://allanlima.wordpress.com/

3 – coinf.cm.utfpr.edu.br 3 Aula 3 - Sumário Procedimentos e Funções Escopo de variáveis: global e local Parâmetros Formas e reais Passagem por valor Passagem por referência Recursividade Variáveis Compostas Estruturas de Dados Homogêneas Unidimensional Bidimensional Multidimensional Estruturas de Dados Heterogêneas Strings

4 – coinf.cm.utfpr.edu.br 4 Procedimentos – são estruturas que agrupam um conjunto de comandos, que são executados quando o procedimento é chamado. Funções – são procedimentos que retornam um valor ao seu término. A Linguagem C não faz distinção. Procedimentos e Funções

5 – coinf.cm.utfpr.edu.br 5 Porque utilizar procedimentos e funções? Evitam que os blocos do programa fiquem grandes demais e mais difíceis de ler e entender. Ajudam a organizar o programa. Permitem reaproveitamento de códigos construídos anteriormente. Evitam repetição de trechos de códigos, minimizando erros e facilitando alterações. Implementam a estratégia de solução de problemas “dividir e conquistar”

6 – coinf.cm.utfpr.edu.br 6 nome_da_função ( arg1, arg2,..., argN) { return valor_de_retorno; } nome_da_função ( arg1, arg2,..., argN) { return valor_de_retorno; } Funções: Como declarar

7 – coinf.cm.utfpr.edu.br 7 int soma(int a, int b) { int c; c = a + b; return c; } int soma(int a, int b) { int c; c = a + b; return c; } Exemplo de uma função: Funções: Como declarar

8 – coinf.cm.utfpr.edu.br 8 int soma(int a, int b) { int c; c = a + b; return c; } int soma(int a, int b) { int c; c = a + b; return c; } Funções: Como declarar Toda função deve ter um tipo (char, int, float), o qual indicará o tipo de seu valor de retorno (saída). Os argumentos (ou parâmetros) indicam o tipo e quais valores são esperados para serem manipulados pela função (entrada). Corpo da função

9 – coinf.cm.utfpr.edu.br 9 int random() { srand(time(NULL)); return (rand() % 100); } int random() { srand(time(NULL)); return (rand() % 100); } Uma função pode não ter parâmetros, basta não informá-los. Exemplo: Funções: Como declarar

10 – coinf.cm.utfpr.edu.br 10 A expressão contida no comando return é chamado de valor de retorno da função. Esse comando é sempre o último a ser executado por uma função. Nada após ele será executado. As funções só podem ser declaradas fora de outras funções. Lembre-se que o corpo do programa principal ( main() ) é uma função! Funções: Como declarar

11 – coinf.cm.utfpr.edu.br 11 Uma forma clássica de realizarmos a invocação (ou chamada) de uma função é atribuindo o seu valor a uma variável: Na verdade, o resultado da chamada de uma função é uma expressão, que pode ser usada em qualquer lugar que aceite uma expressão: resultado = soma(x,y); printf("Soma: %d\n", soma(a,b) ); Funções: Invocando

12 – coinf.cm.utfpr.edu.br 12 int x, y, resultado; int soma(int a, int b){ return (a + b); } int main(){ x = 3; y = 5; resultado = soma(x, y); printf("%d\n", resultado); } int x, y, resultado; int soma(int a, int b){ return (a + b); } int main(){ x = 3; y = 5; resultado = soma(x, y); printf("%d\n", resultado); } Funções: Invocando Função que calcula a soma dos valores de x e y:

13 – coinf.cm.utfpr.edu.br 13 As variáveis x e y no exemplo anterior são chamadas de parâmetros reais. Conforme exemplo anterior, os argumentos não possuem necessariamente os mesmos nomes que os parâmetros que a função espera. Seus valores são apenas copiados para a função chamada, sem ser afetados pelas alterações nos parâmetros dentro da função. Funções: Invocando

14 – coinf.cm.utfpr.edu.br 14 Funções: Invocando O valor que será retornado para o chamador da função. Deve respeitar o tipo de retorno declarado.

15 – coinf.cm.utfpr.edu.br 15 Exercícios Modificar o programa do cálculo da média para que utilize uma função media(...) no cálculo. Modificar o programa do cálculo de IMC para que utilize uma função imc(...) no cálculo. É possível resolver esses exercicios ? Ler um número e chamar uma função que retorna o dobro e o quadrado do número. Ler o valor do lado de um cubo e chamar uma função que retorne sua área (6. lado²) e seu volume (lado³). Ler os coeficientes (a, b, c) de uma equação do 2º grau e chamar uma função que retorne o valor do delta e das raízes.

16 – coinf.cm.utfpr.edu.br 16 O tipo void É utilizado em procedimentos. É um tipo que representa o “nada”, ou seja: –uma variável desse tipo armazena conteúdo indeterminado, –uma função desse tipo retorna um conteúdo indeterminado. Indica que uma função não retorna nenhum valor, ou seja, é um procedimento.

17 – coinf.cm.utfpr.edu.br 17 void nome_do_procedimento ( parâmetro1, parâmetro2,..., parâmetroN) { } void nome_do_procedimento ( parâmetro1, parâmetro2,..., parâmetroN) { } Procedimentos: Como declarar

18 – coinf.cm.utfpr.edu.br 18 void imprime_dobro(int x) { printf("Dobro de x: %d", 2*x); } void imprime_dobro(int x) { printf("Dobro de x: %d", 2*x); } Exemplo de procedimento: Procedimentos: Como declarar

19 – coinf.cm.utfpr.edu.br 19 Para invocarmos um procedimento, devemos utilizá-lo como qualquer outro comando: Compare a diferença de invocação de uma função: procedimento(parâmetros); resultado = função(parâmetros); Procedimentos: Invocando

20 – coinf.cm.utfpr.edu.br 20 int x, y, resultado; void soma() { resultado = x + y; } int main() { x = 3; y = 5; soma(); printf("%d\n", resultado); } int x, y, resultado; void soma() { resultado = x + y; } int main() { x = 3; y = 5; soma(); printf("%d\n", resultado); } Procedimentos: Invocando

21 – coinf.cm.utfpr.edu.br 21 É uma função especial invocada automaticamente pelo sistema operacional (OS) ao iniciar o programa. Quando utilizado, o comando return informa ao OS se o programa funcionou corretamente ou não. O padrão é que um programa retorne: –= zero – caso tenha funcionado corretamente, –≠ zero – caso contrário. A função main()

22 – coinf.cm.utfpr.edu.br 22 Uma variável é chamada local quando é declarada dentro de uma função. Nesse caso: –Ela existe apenas dentro da função que a contém. –Após o término da execução da função, ela deixa de existir. Uma variável é chamada global quando é declarada fora de qualquer função. Nesse caso: –Pode ser acessada em qualquer parte do programa. –Ela existe durante toda a execução do programa. Variáveis locais e globais

23 – coinf.cm.utfpr.edu.br 23 Boa prática de programação: –Deve-se evitar o uso de variáveis globais. –As funções devem modificar apenas as suas variáveis locais e as variáveis passadas a elas como parâmetros. Variáveis locais e globais

24 – coinf.cm.utfpr.edu.br 24 O escopo de uma variável determina de que partes do código ela pode ser acessada. A regra de escopo em C é bem simples: –As variáveis globais são visíveis por todas as funções. –As variáveis locais são visíveis apenas na função onde foram declaradas. Escopo de variáveis

25 – coinf.cm.utfpr.edu.br 25 int nota; void funcao() { int nota; // Neste ponto, nota eh variavel local. } int nota; void funcao() { int nota; // Neste ponto, nota eh variavel local. } Escopo de variáveis É possível declarar variáveis locais com o mesmo nome de variáveis globais. Nesta situação, a variável local “esconde” a variável global.

26 – coinf.cm.utfpr.edu.br 26 Parâmetros ou argumentos são os valores recebidos e/ou retornados por uma função. Podem ser divididos em duas categorias: –Formais: correspondem aos parâmetros utilizados na definição da função. –Reais: correspondem aos parâmetros da função chamadora utilizados para chamar a função. Parâmetros

27 – coinf.cm.utfpr.edu.br 27 int soma(int a, int b) { return (a + b); } int main() { int x = 3; int y = 5; printf("%d\n", soma(x + y)); } int soma(int a, int b) { return (a + b); } int main() { int x = 3; int y = 5; printf("%d\n", soma(x + y)); } Parâmetros reais Parâmetros formais Parâmetros

28 – coinf.cm.utfpr.edu.br 28 É o mecanismo de informar sobre quais valores o processamento definido na função deve ser realizado. Os parâmetros são passados para uma função de acordo com a sua posição. Os parâmetros formais de uma função se comportam como variáveis locais (criados na entrada e destruídos na saída) Existem duas categorias: –Por valor –Por referência Passagem de Parâmetros

29 – coinf.cm.utfpr.edu.br var var_interna Passagem de Parâmetros por Valor Os valores das variáveis externas (função chamadora) são copiados para as variáveis internas da função chamada. Alteração no valor das variáveis terá efeito local à função chamada.

30 – coinf.cm.utfpr.edu.br 30 Os valores das vari á veis externas não são passados para a fun ç ão, mas sim os seus endere ç os. Ocorre altera ç ão no valor das vari á veis externas. Usamos os caracteres: & - indica o endere ç o da vari á vel * - indica o conte ú do do apontador Passagem de Parâmetros por Referência

31 – coinf.cm.utfpr.edu.br var Passagem de Parâmetros por Referência

32 – coinf.cm.utfpr.edu.br 32 Exercícios Ler um número e chamar uma função que retorna o dobro e o quadrado do número. Ler o valor do lado de um cubo e chamar uma função que retorne sua área (6. lado²) e seu volume (lado³). Ler os coeficientes (a, b, c) de uma equação do 2º grau e chamar uma função que retorne o valor do delta e das raízes.

33 – coinf.cm.utfpr.edu.br 33 Funções podem invocar funções

34 – coinf.cm.utfpr.edu.br 34 Um objeto é dito recursivo se pode ser definido em termos de si próprio. “Para fazer iogurte, você precisa de leite e de um pouco de iogurte.” “Para entender recursividade, você primeiro tem de entender recursividade.” Funções: Recursividade

35 – coinf.cm.utfpr.edu.br 35 A recursão é uma forma interessante de resolver problemas, pois o divide em problemas menores de mesma natureza. Um processo recursivo consiste de duas partes: –O caso trivial, cuja solução é conhecida. –Um método geral que reduz o problema a um ou mais problemas menores de mesma natureza. Funções: Recursividade

36 – coinf.cm.utfpr.edu.br 36 Cálculo do fatorial: fat(n) = 1, se n = 1 n * fat(n-1), se n > 1 Recursividade – Fatorial

37 – coinf.cm.utfpr.edu.br 37 Implemente um programa que receba como entrada um valor X qualquer e mostre como saída o fatorial de X. Utilize uma função para calcular o fatorial. Exercício

38 – coinf.cm.utfpr.edu.br 38 int fat(int n) { if (n != 1) return n * fat(n-1); else return 1; } int fat(int n) { if (n != 1) return n * fat(n-1); else return 1; } Função recursiva que calcula o fatorial de um número: Recursividade – Fatorial

39 – coinf.cm.utfpr.edu.br 39 Certos algoritmos são mais eficientes quando feitos de maneira recursiva. Contudo, quando usada incorretamente, a recursividade tende a consumir muita memória e ser lenta. Um parcela da memória é reservada cada vez que o computador faz chamada a uma função. Compare as duas implementações da série de Fibonacci, uma realizada de forma iterativa e outra de forma recursiva. Recursividade – Série de Fibonacci

40 – coinf.cm.utfpr.edu.br 40 São um conjunto de variáveis identificadas por um mesmo nome. –Homogêneas (vetores e matrizes) –Heterogêneas (estruturas) Variáveis Compostas

41 – coinf.cm.utfpr.edu.br 41 6,12,39,45,18,99,8107,06,34, Notas: Posição: Variáveis Compostas Homogêneas Correspondem a posições da memória: –identificadas por um único nome –individualizadas por índices –cujo conteúdo é de um mesmo tipo

42 – coinf.cm.utfpr.edu.br 42 Posição do livro 012…n … … …526 ⋮⋮⋮⋮⋱⋮ m Prateleira Variáveis Compostas Homogêneas: Exemplo

43 – coinf.cm.utfpr.edu.br 43 Utilizados para armazenar conjuntos de dados cujos elementos podem ser endereçados por um único índice. Também são conhecidos como vetores. Arranjos unidimensionais

44 – coinf.cm.utfpr.edu.br 44 Utilizados para armazenar conjuntos de dados cujos elementos necessitam ser endereçados por mais de um índice. Também são conhecidos como arrays ou matrizes. Arranjos multidimensionais

45 – coinf.cm.utfpr.edu.br …n … … …526 ⋮⋮⋮⋮⋱⋮ m Arranjos de 2 dimensões Arranjos multidimensionais: Exemplos

46 – coinf.cm.utfpr.edu.br Arranjo de 3 dimensões Arranjos multidimensionais: Exemplos

47 – coinf.cm.utfpr.edu.br (0,0) (0,1) (0,2) (0,3) (1,0) (1,1) (1,2) (1,3) Arranjo de 4 dimensões Arranjos multidimensionais: Exemplos

48 – coinf.cm.utfpr.edu.br 48 Como declarar: Exemplos: [ ][ ]...; float VetReais[100]; int Vetor[5][9]; char Nome_cliente[50]; float cubo[20][12][7]; float VetReais[100]; int Vetor[5][9]; char Nome_cliente[50]; float cubo[20][12][7]; Vetores e Matrizes na Linguagem C

49 – coinf.cm.utfpr.edu.br 49 O compilador C aloca uma porção contígua da memória para armazenar os elementos das matrizes e vetores. Vetores e Matrizes na Linguagem C

50 – coinf.cm.utfpr.edu.br 50 int VetInt[n];... Índices: n-1 VetInt Índice do primeiro elemento: zero Índice do último elemento:n – 1 Quantidade de elementos:n Vetores e Matrizes na Linguagem C

51 – coinf.cm.utfpr.edu.br Vetor[6] X1 X2 Vetor[1] = 9; Vetor[-1] = 2; Vetor[6] = 8; Vetor[1] = 9; Vetor[-1] = 2; Vetor[6] = 8; 289 Vetores e Matrizes na Linguagem C Índices fora dos limites podem causar comportamento anômalo do código. int X1; int Vetor[6]; int X2 int X1; int Vetor[6]; int X2

52 – coinf.cm.utfpr.edu.br 52 Vetores e Matrizes na Linguagem C O tamanho de um vetor ou matriz é pré-definido, ou seja, após a compilação, não pode ser mudado. Portanto, vetores e matrizes são chamadas estruturas de dados estáticas, pois mantém o mesmo tamanho ao longo de toda a execução do programa.

53 – coinf.cm.utfpr.edu.br 53 Atribuir valores na declaração do vetor: Atribuir valores na declaração da matriz: float matriz[2][3] = {{1,2,3},{4,5,6}}; int vetor[5] = {1,2,3,4,5}; Vetores e Matrizes na Linguagem C: Exemplos

54 – coinf.cm.utfpr.edu.br 54 Colocar os números de 1 a 5 num vetor: Colocar os números de 5 a 1 num vetor: for (i=0; i<5; i++) Vetor[i] = 5 - i; for (i=0; i<5; i++) Vetor[i] = 5 - i; for (i=0; i<5; i++) Vetor[i] = i + 1; for (i=0; i<5; i++) Vetor[i] = i + 1; Vetores e Matrizes na Linguagem C: Exemplos

55 – coinf.cm.utfpr.edu.br 55 Preencher uma matriz n × m com zeros: for (i=0; i < N; i++) for (j=0; j < M; j++) Matriz[i][j] = 0; for (i=0; i < N; i++) for (j=0; j < M; j++) Matriz[i][j] = 0; Vetores e Matrizes na Linguagem C: Exemplos

56 – coinf.cm.utfpr.edu.br 56 Copiar dados de um vetor para outro: Boa prática de programação: –Definir o tamanho de vetores com constantes flexibiliza a manutenção do código. #define TAM_MAX 10 double VetReais[TAM_MAX], VetCopia[TAM_MAX]; for (i=0; i

57 – coinf.cm.utfpr.edu.br 57 Leitura dos dados de um vetor: for (i=0; i

58 – coinf.cm.utfpr.edu.br 58 Determinar: 1.M[3][0] 2.M[4][2] 3.M[1][3] 4.M[5][M[0][2]] 5.M[M[3][1]][1] 6.M[4][(M[1][2]+M[3][0])] Vetores e Matrizes na Linguagem C: Exercício 1

59 – coinf.cm.utfpr.edu.br 59 Ler um elemento K. Ler um vetor A de N elementos. Verificar se o elemento K está presente no vetor: –Se estiver, imprimir a posição onde ele foi encontrado. –Caso contrário, imprimir mensagem "elemento K não encontrado". Vetores e Matrizes na Linguagem C: Exercício 2

60 – coinf.cm.utfpr.edu.br 60 Ler N valores inteiros (N ≤ 100) até que seja digitado o valor zero. A seguir, inverter o vetor, trocando o 1º elemento com o último, o 2º com o penúltimo, e assim sucessivamente. Ao final, imprimir o vetor invertido. Vetores e Matrizes na Linguagem C: Exercícios

61 – coinf.cm.utfpr.edu.br 61 Faça um programa que gere e imprima uma matriz quadrada de dimensão N contendo: –o número 1 nos elementos abaixo da diagonal principal –o número 0 nos demais elementos N deve ser menor ou igual a 20. Vetores e Matrizes na Linguagem C: Exercícios

62 – coinf.cm.utfpr.edu.br 62 Uma string é um vetor de caracteres, cujo final é indicado com um caractere nulo (valor inteiro zero). O terminador nulo também pode ser escrito como '\0‘. Ao definir uma string, deve-se levar em consideração, além do número de caracteres da string, o caractere nulo que termina a string. Strings

63 – coinf.cm.utfpr.edu.br 63 Função gets() –Lê string até o primeiro enter Função scanf() –Lê string até o primeiro espaço em branco Strings: Leitura a partir do teclado

64 – coinf.cm.utfpr.edu.br 64 char curso[15] = "Engenharia"; // Valido somente na // declaracao! char curso[15] = "Engenharia"; // Valido somente na // declaracao! char curso[15]; strcpy(curso,"Engenharia " ); // Requer biblioteca // string.h char curso[15]; strcpy(curso,"Engenharia " ); // Requer biblioteca // string.h Strings: Atribuição de valores

65 – coinf.cm.utfpr.edu.br 65 A Linguagem C possui algumas funções especiais para análise e manipulação de caracteres. Tais funções estão definidas na biblioteca ctype.h A biblioteca ctype.h possibilita a manipulação de caracteres, não de strings inteiras. Manipulação de caracteres

66 – coinf.cm.utfpr.edu.br 66 Função toupper –Converte seu argumento para uma letra maiúscula: Função tolower –Converte seu argumento para uma letra minúscula: = toupper(var2); = tolower(var2); Manipulação de caracteres: Funções tolower e toupper

67 – coinf.cm.utfpr.edu.br 67 FunçãoTesta se seu argumento é um isalnumcaractere alfanumérico isalphacaractere alfabético isasciicaractere ASCII (0 a 127) iscntrlcaractere de controle (0-0x1F ou 0x7F) isgraph caractere imprimível na tela (não leva espaço em consideração) isprint caractere imprimível na tela (leva espaço em consideração) Manipulação de caracteres: Outras funções

68 – coinf.cm.utfpr.edu.br 68 FunçãoTesta se seu argumento é um islowercaractere minúsculo isuppercaractere maiúsculo ispunctcaractere de pontuação isspacecaractere de espaço, tabulação isdigitcaractere numérico (0-9) isxdigitdígito hexadecimal (0-9, a-f ou A-F) Manipulação de caracteres: Outras funções

69 – coinf.cm.utfpr.edu.br 69 A Linguagem C possui funções especiais para análise e manipulação de strings. Tais funções estão definidas na biblioteca string.h. A biblioteca string.h possibilita a manipulação de strings completas (sem considerar caractere a caractere). Manipulação de strings: Biblioteca string.h

70 – coinf.cm.utfpr.edu.br 70 strcat(str1, str2) Concatena str2 ao final de str1 int tam = strlen(str1); Retorna o tamanho de str1 Manipulação de strings: Biblioteca string.h

71 – coinf.cm.utfpr.edu.br 71 int valor = strcmp(str1, str2); –valor = 0, se str1 e str2 são iguais; –valor < 0, se str1 < str2; –valor > 0, se str1 > str2; int valor = strcmpi(str1, str2); Mesmo que strcmp, mas não é sensível ao caso Manipulação de strings: Biblioteca string.h

72 – coinf.cm.utfpr.edu.br 72 strupr(str) Converte uma string para maiúsculas. strlwr(str) Converte uma string para minúsculas. strrev(str) Inverte o conteúdo de uma string. strset(str,char) Substitui todos os caracteres de uma string pelo caractere especificado. Manipulação de strings: Biblioteca string.h

73 – coinf.cm.utfpr.edu.br 73 A seguintes funções fazem parte da biblioteca stdlib.h FunçãoConverte atoi( ) String em int atof( ) String em float itoa( ) Int em string Manipulação de strings: Conversão para números


Carregar ppt "– coinf.cm.utfpr.edu.br 1 Prof. Reginaldo Ré Universidade Tecnológica Federal."

Apresentações semelhantes


Anúncios Google