Problema 14: Um método de Criptografia consiste em substituir as letras de uma mensagem através do emparelhamento de alfabetos tal como dado abaixo. Construir um programa que codifica mensagens usando este esquema. Alfabeto original a b c d... v w x y z Alfabeto cifrado B C D E... W X Y Z A Texto original v e n i v i d i v i c i Texto cifrado W F O J W J E J W J D J Vetores, Matrizes e Strings 1
Problema 14 Tabela ASCII #include <stdio.h> main() { int i; // Laço para construir a Tabela ASCII. printf( Tabela ASCII: \n ); printf( int -> char \n ); // A tabela possui 2^8 valores, pois // char é um tipo de 1 byte (8 bits). for(i=0; i < 256; i++) printf( %4d -> %c \n, i, char(i)); } E se imprimir usando (i+1) % 256? e (i+2)%256? O que ocorre? Vetores, Matrizes e Strings 2
(i+1) % 256 Deslocamento do alfabeto (i+2) % 256 Vetores, Matrizes e Strings 3
// Inicialização. char tmp, texto[1000]; // Ler até encontrar.. i = 0; while (i < 1000) { tmp = getche(); if (tmp == '.') break; else { texto[i] = tmp; i++; } // Guardar tamanho da msg. n = i; texto[0] texto[1] texto[100] Mensagem Secreta. M e a texto[0] texto[1] texto[16] n=17 Vetores, Matrizes e Strings 4
// Inicialização char tmp, texto[1000]; // Ler até.. Não ler backspace. i = 0; while (i < 1000) { tmp = getche(); if (tmp == '.') break; if (int(tmp)!= 8) { texto[i] = tmp; i++; } else i--; } Corresponde ao caractere backspace na Tabela ASCII. Mr ensagem Secreta. Mensagem Secreta M texto[0] e texto[1] a texto[16] // Guardar tamanho da msg. n = i; Vetores, Matrizes e Strings 5
Problema 14 Criptografia #include <stdio.h> #include <conio.h> main() { int i, n; char tmp, texto[1000]; // Armazenando a mensagem. printf( Entre com a mensagem: ); i=0; while (i < 1000) { tmp = getche(); // Termina o laço. if (tmp ==. ) break; // Se não for backspace, guarde. if (int(tmp)!= 8) { texto[i] = tmp; i = i + 1; } else i--; //Backspace: elimina ant.} Problema14 Criptografia n = i; // Tamanho do vetor em n. // Codificando a mensagem. for(i=0; i < n; i++) texto[i] = (texto[i]+1)%256; // Mostrando a mensagem //codificada. printf( \n Mensagem Codificada:\n ); for (i=0; i < n; i++) { printf( %c,texto[i]); } printf( \n ); } // fim programa Vetores, Matrizes e Strings 6
Observe que: M e n s a g e m S e c r e t a N f o t b h f n! T f d s f u b Vetores, Matrizes e Strings 7
Problema 15: Criar um programa que captura uma senha e compara com uma palavra previamente cadastrada. No momento da digitação, a senha não deve aparecer. Somente após a validação da senha é que deverá aparecer a palavra digitada e se a palavra digitada confere com a senha ou não. Vetores, Matrizes e Strings 8
// Inicialização. char texto[100], tmp; char senha[100] = Secreta ; // Ler até encontrar o enter ( ). i = 0; while( i < 100 ) { tmp = getch(); // Se digitou, pare leitura. if (int(tmp) == 13) break; else {texto[i]=tmp; printf( * ); i++;} } // Fim while. // Guardar tamanho da msg. n = i; Lê o caractere do teclado, mas o que foi digitado não aparece na tela. Verifica se foi digitado o enter. É preciso ter cuidado com backspace! Vetores, Matrizes e Strings 9
// Ler até encontrar. i = 0; while( i < 100 ) { tmp = getch(); // Se digitou, pare leitura. if (int(tmp) == 13) break; else if (int(tmp)!= 8) //. {printf( * ); texto[i]=tmp; i++; } else i--; // =. } // Fim for. // Guardar tamanho da msg. n = i; Tratamento do Backspace S x e c texto Palavra Digitada S e c r e r e t Vetores, Matrizes e Strings 10 t
verif = 1; // Supõe que senha = texto. // Tamanho senha igual tamanho texto? if (ns == nt) //nt= tamanho digitado { // Ler até achar letra ou fim palavras. for (i=0; i < nt; i++) if (texto[i]!= senha[i]) { verif = 0; break; } } else // Tamanhos. verif = 0; Caso 1: texto senha i Caso 2: texto senha S S Vetores, Matrizes e Strings 11 e e c c r r 0 1 2 3 4 5 6 S S e e g c r r e e e e texto[2]!= senha[2] t t d t a a o a
Problema 15 Senha #include <stdio.h> #include <conio.h> main() { int i, verif, nt, ns = 7; char tmp, texto[100]; char senha[100]="secreta"; // Armazenando a senha digitada. printf("digite a senha "); i=0; while (i < 100) { tmp = getch(); // Termina o laço se for?. if (int(tmp) == 13) break; else if (int(tmp)!= 8) //??. { printf("*"); texto[i] = tmp; i++; } else { putchar('*'); putchar(' '); putchar(char(8)); i--; } //? } //fim laço Problema 15 Senha nt = i; // Tamanho digitada em nt. verif = 1; // Supõe texto == senha. // Ver se texto e senha tem tam?==. if (nt == ns) { for (i=0; i < nt; i++) if (texto[i]!= senha[i]) { verif = 0; break; } } else verif = 0; // Mostrando mensagem. if (verif) printf("\nsenha Correta! \n"); else printf("\nsenha incorreta! \n"); getchar(); } // fim programa Vetores, Matrizes e Strings 12
Vetores, Matrizes e Strings 13
15 - Matrizes Unesp Campus de Guaratinguetá Curso de Programação Computadores Prof. Aníbal Tavares Profa. Cassilda Ribeiro Ministrado por: Prof. André Amarante
15.1 Dados Estruturados: Matrizes Matrizes - Definição Também chamadas conjuntos bidimensionais, contém: um número fixo de elementos; todos são do mesmo tipo; arranjados na forma de tabela de 2 dimensões; Vetores, Matrizes e Strings 15
15.1 Dados Estruturados: Matrizes Matrizes - Definição Ex.: Uma matriz chamada MAT que tenha m elementos (horizontal) e n elementos (vertical) 0 1 2 3 4 m-1 0 1 2 3 4... n-1... * Mat[2][3] Vetores, Matrizes e Strings 16
15.1 Dados Estruturados: Matrizes Matrizes ou Array bidimesionais são estruturas de dados que organizam informações; de mesmo tipo e mesmo nome; em tabelas. Para tanto, são utilizados dois índices, que correspondem a linhas e colunas. Para se acessar ou modificar um elemento da matriz deve-se especificar o nome da matriz seguido de dois números entre colchetes ([ ]), sendo que o primeiro corresponde a linha e o segundo corresponde a coluna relativa a posição que o elemento ocupa na Tabela. Vetores, Matrizes e Strings 17
15.1 Dados Estruturados: Matrizes Declaração e Atribuição de Matrizes Declaração int a[ 3 ][ 2 ]; Uma matriz nada mais é que um vetor de duas dimensões, logo a atribuição de valores a uma matriz é feita de modo semelhante atribuição de valores a um vetor. A declaração de um vetor com n dimensões é feita do seguinte modo: tipo nome_do_vetor [dim 1 ][dim 2 ][dim 3 ]... [dim n ] Vetores, Matrizes e Strings 18
15.1 Dados Estruturados: Matrizes Ex: Declaração de uma matriz de inteiro de dimensão 3x2. main() int mat[3][2]; //3 linhas, cada uma delas com 2 posições Linha 0 Linha 1 Linha 2 Coluna 0 mat[0][0] mat[1][0] mat[2][0] Coluna 1 mat[0][1] mat[1][1] mat[2][1] Vetores, Matrizes e Strings 19
15.1 Dados Estruturados: Matrizes - Atribuição Inicial Atribuição Automática Inicial A atribuição inicial é feita da mesma maneira que para vetores de uma só dimensão. Ex: int a[ 3 ][ 2 ] = {1, 1, 2, 2, 3, 3}; Neste exemplo, o vetor tem 3 linha e duas colunas, logo está sendo feita a seguinte atribuição: a[0][0]=1 a[1][0]=2 a[2][0]=3 a[0][1]]=1 a[1][1]=2 a[2][1]=3 Observe que os dois primeiros números da chave estão sendo atribuídos a 1ª. linha, os dois seguintes são atribuídos à segunda linha e os dois últimos são atribuídos a terceira linha. Vetores, Matrizes e Strings 20
15.1 Dados Estruturados: Matrizes - Atribuição Inicial A atribuição inicial também pode ser feita da seguinte maneira Ex: int a[ 3 ][ 2 ] = { {1, 1}, {2, 2}, {3, 3} }; Vetor de tamanho 2x1 Observe que agora existe uma separação por linhas, sendo: {1,1} relativa a 1ª. linha; {2,2} relativa a 2ª. linha e {3,3} relativa a 3ª. linha. Na realidade em C, uma matriz é considerada um vetor de vetores. Então, no exemplo acima: a É um vetor com 3 elementos (cada elemento é um vetor de 2 inteiros) a[i] É um vetor de 2 inteiro a[i][j] É um inteiro que está colocado na posição i, j do vetor a Vetores, Matrizes e Strings 21
15.1 Dados Estruturados: Matrizes Acesso e Modificação de valores de uma Matriz Matriz Inicial Operações Matriz Final 1 1 a[0][1]=a[0][1]+2 1 3 2 2 3 3 a[1][0]=a[0][1]+1 a[2][0]=a[2][0]*a[1][0] 4 2 12 3 Vetores, Matrizes e Strings 22
Unesp-Campus de Guaratinguetá 15 - Matrizes FIM Aula 15 Referências dos slides Curso de Programação de Computadores Prof. Aníbal Tavares Profa. Cassilda Ribeiro Prof. Décio Mourão Vetores, Matrizes e Strings Prof. Galeno Sena 23