João Araujo
Dr. en Informatique, Université de Versailles, França.

Segunda Prova 2006-2

Questão 1

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");
}

Questão 2

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:

123
681

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

c/segunda_prova_-_2006-2.txt · Última modificação: 12/02/2007 08:48:48 (edição externa)
geomatica Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0