Linguagem C - Vetores, Matrizes e Funções

Post on 20-Jun-2015

5.829 views 4 download

description

Linguagem C - Vetores, Matrizes e Funções

Transcript of Linguagem C - Vetores, Matrizes e Funções

VETORESMATRIZESFUNÇÕES

Profª Ms. Engª Elaine Cecília GattoCurso de Bacharelado em Engenharia de ComputaçãoUniversidade do Sagrado CoraçãO – USCBauru/SP

Vetores• Variaveis compostas homogeneas unidimensionais• Os índices começam em zero• A quantidade de elementos que o vetor pode armazenar deve

ser um valor inteiro fixo

• DECLARAÇÃO

• Exemplo1: int vet[10];• Começa na posição zero e termina na posição 9 (tamanho do

vetor – 1);

• Exemplo 2: char x[5];• Começa na posição zero e termina na posição 4

2

Vetores • Exemplo 3: • #define tam 5; • char z[tam];• Começa na posição zero e termina na posição 4

• ATRIBUIÇÃO

• Exemplo 1: • vet[0] = 1; //atribui o valor 1 à primeira posição do vetor• X[3] = ‘b’; //atribui a letra b à quarta posição do vetor

3

Vetores • PREENCHENDO

• for(i=0; i<10; i++)• scanf( “ %d ” , &vetor[i] );

• MOSTRANDO OS VALORES

• for(i=0; i<10; i++)• printf( “ %d ” , vetor[i] );

4

Matriz • Variaveis homogeneas bidimensionais ou multidimensionais• Pode ter até 12 dimensões de acordo com o padrão ANSI• Para cada dimensão, um índice deve ser usado

• DECLARAÇÃO

• float x[2][6]; //uma matriz com duas linhas e seis colunas• char mat[4][3]; //uma matriz com quatro linhas e tres colunas• float y[2][4][3]; //uma matriz com duas linhas, quatro colunas

e três profundidades

5

MATRIZES• ATRIBUIÇÃO

• X[1][4] = 5; //atribui o valor 5 ao espaço identificado pelo indice 1 (linha 2) e índice 4 (coluna 5)

• Mat[3][2] = ‘d’; //atribui o valor d à quarta linha e à terceira coluna

• Y[0][3][1] = 12; //atribui o valor 12 à primeira linha, quarta coluna e segunda profundidade.

6

Matrizes • PREENCHENDO

for(i=0; i<7; i++){ //linhafor(j=0; j<3; j++) //coluna

scanf( “ %d ”, &mat[i][j] );}

Preenche primeiro todas as colunas da linha 0Depois todas as colunas da linha 1E assim por diante

7

Matrizes • IMPRIMINDO

for(i=0; i<7; i++){for(j=0; j<3; j++)

printf( “ %d ”, mat[i][j] );}

8

Matrizes • Exemplo for(i=0; i<3; i++){

printf( “ Elementos da linha %d ”, i);for(j=0; j<4; j++){

printf( “ %d ”, x[ i , j ] );}

}

9

MEMÓRIA TELA

i j

0 Elementos da linha 0

0 0 4

0 1 5

0 2 1

0 3 10

1 Elementos da linha 1

Matrizes • Exemplo for(j=0; j<4; j++){

printf( “ Elementos da coluna %d ”, j);for(i=0; i<3; i++){

printf( “ %d ”, x[ i , j ] );}

}

10

MEMÓRIA TELA

j i

0 Elementos da coluna 0

0 0 4

0 1 5

0 2 1

1 Elementos da coluna 1

1 0 6

Sub rotinas• Sub-rotinas ou subprogramas são blocos de instruções que

realizam tarefas específicas

• Como o problema pode ser subdividido em pequenas tarefas, os programas tendem a ficar menores e mais organizados

• Programas são executados linha após linha, mas quando se usa subrotina, um desvio é realizado na execução do programa

• Uma subrotina pode ou não receber um parametro • Uma subrotina pode ou não retornar um valor• Uma subrotina pode ter variaveis locais, variaveis que são

criadas apenas para uso interno da subrotina

11

Sub rotinas• Modularização do programa por meio de funções• Variaveis globais: são aquelas variaveis conhecidas por todo o

programa e são declaradas fora das funções

• FUNÇÕES SEM PASSAGEM DE PARAMETROS E SEM RETORNO

• Não recebe nenhuma informação no momento de sua chamada

• Não repassa nenhum valor para quem a chamou

12

Sub rotinas#include <stdio.h>int a, b, s; //variáveis globaisvoid soma(){

printf(“Digite dois números”);scanf(“%d %d”, &a, &b);s = a + b;printf(“ a soma é %d”, s);

}int main(){

soma();getchar();return 0;

}

13

Sub rotinas• FUNÇÕES COM PASSAGEM DE PARAMETROS E SEM

RETORNO

• Recebem valores no momento em que são chamadas• Não devolvem nenhum valor para quem as chamou

14

Sub rotinas#include <stdio.h>void soma(int a, int b){ int s; //variável local da subrotina s = a + b; printf('a soma é %d', s);}int main(){ int a, b; //variável local do programa principal printf('Digite dois valores'); scanf(' %d %d ', &a, &b); soma(a, b); getchar(); return 0;}

15

Sub rotinas• FUNÇÕES SEM PASSAGEM DE PARAMETROS E COM

RETORNO

• Não recebem nenhum valor no momento em que são chamadas

• Devolvem um valor para quem as chamous

16

Sub rotinas#include <stdio.h>int soma(){ int a, b, s; //variável local da subrotina printf('Digite dois valores'); scanf(' %d %d ', &a, &b); s = a + b; return s;}int main(){ int s; //variável local do programa principal s = soma(); //chamada da sub rotina printf(' a soma é: %d', s); getchar(); return 0;}

17

Sub rotina• FUNÇÕES COM PASSAGEM DE PARAMETROS E COM

RETORNO

• Recebem valores no momento em que são chamadas• Devolvem um valor para quem as chamou

18

Sub rotina#include <stdio.h>int soma(int a, int b){ return a+b;}int main(){ int a, b, s; //variável local do programa principal printf('Digite dois números'); scanf(' %d %d ', &a, &b); s = soma(a, b); //chamada da sub rotina printf(' a soma é: %d', s); getchar(); return 0;}

19

Sub rotina• Se você quiser, pode escrever todas as funções antes do MAIN• Se quiser escrevê-las após MAIN, deverá utilizar os protótipos

de funções

• PASSAGEM DE PARAMETROS POR VALOR

• Significa que a função trabalhará com cópias dos valores passados no momento de sua chamada

20

Sub rotina#include <stdio.h>int soma_dobro(int a, int b);int main(){ int x, y, res; //variável local do programa principal printf('Digite dois números'); scanf(' %d %d ', &x, &y); res = soma_dobro(x, y); //chamada da sub rotina printf(' a soma do dobro dos números %d e %d = %d', x, y, res); getchar(); return 0;}int soma_dobro(int a, int b){ int soma; a = a * 2; b = b * 2; soma = a + b; return soma;}

21

Quando a função chega ao fim, as variaveis criadas são completamente destruídas e as alterações realizadas são perdidas. X continuara valendo 5 e y continuara valendo 3.

Sub rotina#include <stdio.h>int soma_dobro(int a, int b);int main(){ int x, y, res; //variável local do programa principal printf('Digite dois números'); scanf(' %d %d ', &x, &y); res = soma_dobro(x, y); //chamada da sub rotina printf(' a soma do dobro dos números %d e %d = %d', x, y, res); getchar(); return 0;}int soma_dobro(int a, int b){ int soma; a = a * 2; b = b * 2; soma = a + b; return soma;}

22

FUNÇÃO MAIN

X 5

Y 3

RES 16

FUNÇÃO SOMA_DOBRO

A 5

B 3

SOMA 16

Sub rotina• PASSAGEM DE PARAMETROS POR REFERENCIA

• Significa que os parametros passados para a função correspondem a endereços de memória ocupados por variáveis

• Toda vez que for necessário acessar determinado valor, isso será feito por meio de referencia, apontamento ao seu endereço de memória

23

Sub rotina#include <stdio.h>int soma_dobro(int *a, int *b);int main(){ int x, y, res; //variável local do programa principal printf('Digite dois números'); scanf(' %d %*c %d %*c', &x, &y); res = soma_dobro(x, y); //chamada da sub rotina printf(' a soma do dobro dos números %d e %d = %d', x, y, res); getchar(); return 0;}int soma_dobro(int *a, int *b){ int soma; *a = 2 * (*a); *b = 2 * (*b); soma = *a + *b; return soma;}

24

Quando a função chega ao fim, as variaveis criadas são completamente destruídas, mas as alterações realizadas não se perdem. X valerá 10 e Y 6, isto porque as alterações fizeram referencia a endereços de memória

Sub rotina

25

Sub rotinas• Matrizes e vetores só podem ser passadas para funções por

referencia

void soma_linhas(float m[][5], float v[]){ //um vetor com colchetes vazios ou uma matriz com colchetes da primeira dimensão vazios significa que são variáveis ponteiros que guardam os endereços iniciais das variáveis}

int main(){soma_linhas(mat, vet); //isto indica que esta sendo usado

o endereço de memória ocupado pela posição 0 do vetor ou pela posição 0x0 da matriz}

26

Sub rotinas• SUBROTINAS EM ARQUIVOS SEPARADOS – BIBLIOTECAS

• Uma biblioteca é gerada a partir de um arquivo .H• Esse arquivo .H não contém o programa principal• O programa principal irá utilizar as funções definidas nesse

arquivo .H• Chame seu arquivo .H usando a diretiva #INCLUDE “caminho\

nome_da_biblioteca”, em que caminho, é o local onde está salva sua biblioteca

27

Sub rotinasMYBIBLIO.H#include <stdio.h>void sub_rotina1(){ printf(“mostrando uma mensagem”); }void sub_rotina2(){ }void sub_rotina3(){ }

MYPROGRAM.C#include <stdio.h>#include “c:\teste\MYBIBLIO.H”int main(){

sub_rotina1();sub_rotina2();

}

28