capítulo vi – variáveis indexadas

Download Capítulo  VI – Variáveis Indexadas

Post on 08-Jan-2016

32 views

Category:

Documents

3 download

Embed Size (px)

DESCRIPTION

Captulo VI Variveis Indexadas. 6.1 A necessidade de variveis indexadas 6.2 Vetores e matrizes 6.3 Aplicaes com vetores numricos 6.4 Aplicaes com matrizes numricas 6.5 Cadeias de caracteres 6.6 Aplicaes com vetores de cadeias de caracteres. - PowerPoint PPT Presentation

TRANSCRIPT

  • Captulo VI Variveis Indexadas6.1 A necessidade de variveis indexadas6.2 Vetores e matrizes6.3 Aplicaes com vetores numricos6.4 Aplicaes com matrizes numricas6.5 Cadeias de caracteres6.6 Aplicaes com vetores de cadeias de caracteres

  • 6.4 Aplicaes com Matrizes Numricas6.4.1 Transformar uma matriz quadrada em sua transposta

    Matriz transposta de uma matriz quadrada aquela cujas linhas so as colunas da matriz original e cujas colunas so as linhas da mesma

  • Exemplo:

    Se o objetivo fosse apenas obter o resultado na tela:

    for (i = 0; i < n; i++) {for (j = 0; i < n; j++) printf (%5d, A[j][i]); printf (\n);}

    Mas deseja-se transformar a original na transposta

    Matriz quadrada 5 x 5 originalMatriz transposta da originalEscrevendo cada coluna numa linha da telaA

  • AOperao bsica para a transformao:

    Trocar A[i][j] com A[j][i]

    Exemplo: se i = 2 e j = 3,

    Trocar A[2][3] com A[3][2]

  • AOperao bsica para a transformao:

    Trocar A[i][j] com A[j][i]

    Exemplo: se i = 2 e j = 3,

    Trocar A[2][3] com A[3][2]

  • AOperao bsica para a transformao:

    Trocar A[i][j] com A[j][i]

    Exemplo: se i = 2 e j = 3,

    Trocar A[2][3] com A[3][2]

  • AOperao bsica para a transformao:

    Trocar A[i][j] com A[j][i]

    Exemplo: se i = 2 e j = 3,

    Trocar A[2][3] com A[3][2]Trocar (A[i][j], A[j][i]):

    aux = A[i][j];A[i][j] = A[j][i];A[j][i] = aux;

  • APara transformar toda a matriz:

    Percorr-la com 2 cursores i e je Trocar (A[i][j], A[j][i])

    O percurso no pode abranger toda a matriz!!! Porqu???Sejam os comandos:

    for (i = 0; i < n; i++) for (j = 0; j < n; j++) Trocar (A[i][j], A[j][i]);

    que percorrem toda a matrizQuando (i, j) = (1, 3)Trocar (A[1][3], A[3][1])

    Mais adiante, quando (i, j) = (3, 1)Trocar (A[3][1], A[1][3])

    A troca anterior desfeita

  • ADeve-se planejar o percurso de i e de j

    Para comear, a diagonal principal no precisa ser percorrida

    A parte acima dessa diagonal deve ser trocada com a parte abaixo dela

  • AOs comandos:

    for (i = 0; i

  • #include #include int main () {int A[10][10], i, j, n, aux;

    /*Leitura e escrita da matriz*/

    printf ("Dimensao da matriz quadrada: "); scanf ("%d",&n);printf ("\nElementos da matriz: \n");for (i = 0; i

  • /*Transformacao da matriz em sua transposta e sua escrita*/

    for (i = 0; i

  • 6.4.2 Sntese de sub-matrizes

    Muito usada em processamento de imagens p. ex., para o controle de desmatamento numa regio

    Dados captados pela cmera de um satlite so armazenados numa imensa matriz bidimensional, para serem usados na confeco de fotografias

    Tipicamente uma foto constituda de uma matriz de pontos, de dimenses bem menores que as da matriz preenchida pela cmera

    Ento cada ponto da foto deve conter uma sntese das informaes contidas numa sub-matriz da primeira matriz

  • A seguir, o desenvolvimento de um programa para sintetizar o contedo das sub-matrizes de uma grande matriz B em elementos de outra matriz A bem menor que a primeira

    Dimenses: B(20 x 20) e A(5 x 5)

    A sntese consiste na mdia aritmtica dos elementos de cada sub-matriz de B

    Sendo inteiros os elementos de B, ento os de A devem ser reais

    A seguir, um contedo possvel para a matriz B e o contedo correspondente da matriz A

  • Cada linha de A corresponde a 4 linhas de B

    Cada coluna de A corresponde a 4 colunas de B

    A linha i de A corresponde s linhas de 4i a 4i+3 de B

    A coluna j de A corresponde s colunas de 4j a 4j+3 de B

  • A linha i de A corresponde s linhas de 4i a 4i+3 de B

    A coluna j de A corresponde s colunas de 4j a 4j+3 de B

    Clculo de A[i][j]:aux = 0;for (x = 4*i; x

  • Clculo de A[i][j]:

    aux = 0;for (x = 4*i; x

  • #include #include int main () {

    /*Declaracoes das variaveis*/

    float A[5][5]; int B[20][20];int i, j, k, x, y, z; float aux; char c;

    /*Formacao da matriz B (20 x 20)*/

    for (i = k = 0; i < 20; i++)for (j = 0; j < 20; j++)B[i][j] = ++k;

  • /*Escrita da matriz B (20 x 20) no video*/

    printf ("Matriz principal? (s/n): ");scanf ("%d", &c);if (c == 's' || c == 'S') { printf ("\n\n");for (i = 0; i < 20; i++) for (j = 0; j < 20; j++) printf ("%4d", B[i][j]);}Os 20 elementos preenchem uma linha inteira do vdeo

    No preciso o \n no final de cada linha

  • /*Sintetizacao da Matriz B na matriz A*/

    for (i = 0; i < 5; i++)for (j = 0; j < 5; j++) {aux = 0;for (x = 4*i; x

  • /*Escrita da matriz A(5 x 5) no video*/

    printf ("\n\nMatriz reduzida? (s/n): ");scanf ("%d", &c);if (c == 's' || c == 'S') { printf ("\n\n");for (i = 0; i < 5; i++) {for (j = 0; j < 5; j++) printf ("%8.2f", A[i][j]);printf ("\n");}}

    /*Fechamento da tela*/

    printf ("\n\n"); system ("pause"); return 0;}

  • Exerccios 6.4:

    Escrever um programa para ler os elementos de uma matriz A e quatro inteiros i, j, k, l, formando em seguida outra matriz B, contendo uma submatriz de A composta de suas linhas de i a j e de suas colunas de k a l; no final, o programa deve escrever a matriz B

    A seguinte matriz tem o apelido de matriz ziguezague de dimenses 5 x 8:

    Fazer um programa que leia 2 inteiros positivos m e n e em seguida construa e escreva no vdeo uma matriz ziguezague de dimenses m x n

  • As seguintes matrizes tm o apelido de matrizes-cebolas de dimenses (6 x 7) e (8 x 5):

    Fazer um programa para ler m e n e construir uma matriz-cebola de dimenses m e n

  • As seguintes matrizes tm o apelido de matrizes-espirais de dimenses 5 e 6:

    Fazer um programa para ler n e construir uma matriz-espiral de dimenso n

    e

  • Fazer um programa para ler o valor de uma varivel inteira n, os valores dos elementos reais de uma matriz A triangular superior de dimenses (n x n) e de um vetor B de dimenso n, e resolver o seguinte sistema:

  • Captulo VI Variveis Indexadas6.1 A necessidade de variveis indexadas6.2 Vetores e matrizes6.3 Aplicaes com vetores numricos6.4 Aplicaes com matrizes numricas6.5 Cadeias de caracteres6.6 Aplicaes com vetores de cadeias de caracteres

  • 6.5 Cadeias de Caracteres6.5.1 Cadeias de caracteres como variveis e constantes

    Vetores de caracteres so denominados cadeias de caracteres (strings, em Ingls)

    Podem ser manipulados de forma diferenciada em relao aos vetores numricos, pela maioria das linguagens de programao

    Tudo comea pela existncia de constantes do tipo cadeia de caracteres, mas no de constantes vetores numricos

  • Constante cadeia de caracteres uma sequncia de caracteres delimitada por aspas (), como por exemplo:

    abc DEF

    Os componentes dessa constante so os caracteres da sequncia, sem as aspas, e mais o caractere \0, que o finalizador da cadeia

    Ento, os caracteres componentes da constante anterior so:

    a, b, c, , D, E, F e \0

  • A declarao sem inicializao de uma varivel cadeia de caracteres pode ser feita da mesma forma que a de vetores numricos

    Exemplo: char cad[30];

    Mas a declarao com inicializao pode ser feita da seguinte maneira:

    char cad[] = ABCDE;

    que equivalente s seguintes:

    char cad[] = {A, B, C, D, E, \0};char cad[6] = ABCDE;char cad[6] = {A, B, C, D, E, \0};

  • char cad[] = ABCDE;

    Esta declarao reserva espao na memria para os elementos cad[0], cad[1], cad[2], cad[3], cad[4] e cad[5]

    e coloca neles os caracteres A, B, C, D, E, \0

    Representao grfica:

  • Tal como em vetores numricos, os elementos de uma cadeia de caracteres podem ser referenciados individualmente

    Exemplos: cad[3] = b; y = cad[i+1];

    A seguinte atribuio no permitida:

    cad = xyzwt;

    Porm, se cad for declarada como sendo do tipo ponteiro para caracteres, isso ser permitido

  • 6.5.2 Leitura e escrita de cadeias de caracteres

    O formato %s pode ser usado nas funes printf e scanf para fazer escrita e leitura de valores de variveis do tipo cadeia de caracteres

    Funo printf:

    O formato %s faz com que os caracteres da varivel sejam escritos na tela at que o caractere \0 seja encontrado, no sendo ele escrito

    Por exemplo, os comandos:char cad[10] = ABCDE;printf (%s, cad);escrevero na tela:ABCDE

  • Se a varivel cad no contiver o caractere \0:

    printf continuar escrevendo todos os caracteres encontrados pela frente, invadindo locais reservados para outras finalidades, at encontrar um byte que contenha \0

  • Funo scanf :

    O formato %s procura no buffer do teclado o primeiro caractere diferente do espao em branco, do enter e da tabulao

    Ao encontr-lo, scanf passa a transportar para a varivel alvo da leitura todos os caracteres do buffer, at encontrar um caractere espao em branco, um enter ou uma tabulao

    Da, em vez de transportar o espao em branco, a tabulao ou o enter, scanf coloca na varivel o finalizador \0, encerrando a leitura para essa varivel

  • Exemplo: seja o seguinte trecho de programa:

    char cad[20], c;scanf ("%s%c", cad, &c);printf ("\ncadeia lida:%s; caractere lido:%d", cad, c);

    Se o operador digitar ABCDE FGHASCII ( ) = 32Se o operador digitar 4 espaos e o enter: o buffer se esvaziar e o computador ficar esperando nova digitao encerrada por enterNo usar &cad

    O nome de uma varivel indexada por si s um endereo (cf. ponteiros)

  • Cuidado: na leitura de uma varivel cadeia de caracteres, o nmero de caracteres digitados no deve exceder o espao reservado para ela

    Exemplo experimental

Recommended

View more >