Índice
- Disciplinas Atuais
- Disciplinas Antigas
Escreva uma função em C que atribua o conteúdo de um vetor ou matriz com o mesmo valor: void atribui_vetor(int *p, int n, int m, int valor). Se n for igual a zero, a função deve atribuir a um vetor, senão, atribuir a uma matriz. Assim, a chamada atribui_vetor(a, 0, m) atribuir os m elementos do vetor a e atribui_vetor(b, n, m) atribuir a matriz b de n linhas por m colunas (3pts).
Solução Questão 1
/*************************************************************************** * Questao 1 LabProg 2006-2 prova2 * * Wed Feb 7 14:03:35 2007 * Copyleft 2007 João Araujo * ****************************************************************************/ #include <stdio.h> #define N 3 #define M 4 #define NM N*M #define VALOR 1 void atribui_vetor(int *p, int n, int m, int valor); void printMatriz(int *pm,int n, int m); int main() { int mat1[N][M]={1,2,3,4, 5,6,7,8, 9,10,11,12}; int mat2[NM]={1,2,3,4,5,6,7,8,9,10,11,12}; printf("Matriz Original:\n"); printMatriz((int *)mat1,N,M); atribui_vetor((int *)mat1,N,M,VALOR); printf("Matriz Modificada:\n"); printMatriz((int *)mat1,N,M); printf("Vetor Original:\n"); printMatriz(mat2,0,NM); atribui_vetor(mat2,0,NM,VALOR); printf("Vetor Modificado:\n"); printMatriz(mat2,0,NM); } /* Solução é a função seguinte. O resto é só para testar */ void atribui_vetor(int *p, int n, int m, int valor) { int dimensao; dimensao=(n==0)?m:n*m; while (dimensao>0) { *p++=valor; dimensao--; } } // Fim da solução void printMatriz(int *pm,int n, int m) { int i,j; if (n==0) //vetor for(i=0;i<m;i++) printf("%d ",*pm++); else for (i=0;i<n;i++) { for (j=0;j<m;j++) printf("%d ",*pm++); printf("\n"); } printf("\n"); }
Uma forma simples de codificação é o uso de matrizes de números. A primeira linha da matriz é usada como chave de codificação para a primeira linha do texto; a segunda linha, para a segunda linha do texto, e assim sucessivamente. Quando se chega na última linha da matriz, o processo reinicia com a primeira linha, até o término do texto. Podemos usar qualquer método de codificação para cada linha, o mais simples é somar o número ao caractere, obtendo, assim este caractere codificado. Ex: Considere a seguinte matriz:
1 | 2 | 3 |
6 | 8 | 1 |
E o texto de 3 linhas:
Celacanto provoca maremoto
Celacanto provoca maremoto
Celacanto provoca maremoto
Seria codificado como:
Dgobedovr!rupxrdc#ncuforuq
Immgkbt|p&xsu~pii!siskupzw
Dgobedovr!rupxrdc#ncuforuq
Implemente um programa C que execute esta tarefa. O texto entrado deverá ser pela entrada padrão, ou seja, pode ser usado redirecionamento. O programa deverá atender as seguintes especificações:
a) aceitar o parâmetro -c ou -d na linha de comando. De acordo com este parâmetro, ele deverá codificar (-c) ou decodificar (-d) o texto entrado. Seu programa deve testar e validar estes parâmetros, emitindo mensagem de erro, caso não seja especificada a ação a ser tomada ou for especificada uma ação inválida. (1,5pt);
b) possuir uma função void code (char *p, int *matriz, int linhas, int colunas, int action) que recebe como parâmetros um apontador para a linha a ser codificada, um ponteiro para a matriz a ser usada, o número de linhas e colunas desta matriz e a ação a ser executada. Se ação for codificar, os números da matriz são somados, se for decodificar, os números da matriz são subtraídos (4pts);
c) Se for passado o parâmetro -n, onde n é um número inteiro, o programa deve considerar que as n primeiras linhas entradas são a matriz que deve ser usada para codificar. O programa deve aceitar matrizes até 10×10. Os números vêm separados por espaço e são sempre positivos. O programa deve ler estes números, atribuir à matriz de decoficação e começar a codificar logo após as n primeiras linhas, usando a matriz fornecida (1,5pt).
Não esqueça de colocar seu nome em cada arquivo fonte. Os programas serão corrigidos usando o compilador gcc em ambiente Linux.
Boa sorte