Ir ao conteúdo
  • Cadastre-se

Matriz - Pascal!


MattStark

Posts recomendados

Galera tenho que ampliar uma matriz conforme o usuário informe o valor da ampliação e a matriz a ser ampliada .

Exemplo, usuário informa matriz 2x2 e ampliação 2:

10 20

30 40

Deverá escrever assim na tela:

10 10 20 20

10 10 20 20

30 30 40 40

30 30 40 40

Bom eu comecei o código mas não tá excutando da forma esperada

tá escrevendo assim na tela

10 10 20 20

10 10 20 20

00 00 00 00

00 00 00 00

Segue o meu código:

Program Amplia_Matriz ;
Var mat : array[1..100,1..100]of integer;
matf : array[1..200,1..200]of integer;
i,j,m,n,a,b,z,cont : integer;
pula,cancel : boolean;
Begin
Writeln ('Quantidade de linhas e colunas da imagem');
Readln (m,n);
Writeln ('Informe qntas vezes a imagem será ampliada');
readln(z);
i:=1;
Repeat
j:=1;
Repeat
writeln ('Informe,na posição:',i,' e ',j);
readln (mat[i,j]);
j:=j+1;
Until j>n;
i:=i+1;
Until i>m;
i:=1;
cont:=0;
b:=1;
Repeat
j:=1;
a:=1;
pula:=false;
repeat
cancel:=false;
if (i=cont*z+1) then
begin
Repeat
matf[i,a]:=mat[b,j];
if(a mod z = 0) then
cancel:= true;
a:=a+1;
Until (cancel=true);
End
Else
Begin
Repeat
matf[i,a]:=matf[i-1,a];
a:=a+1;
if (a>z*n) then
pula:=true;
Until (a>z*n);
End;
if (i mod z = 0) then
begin
cont:=cont+1;
b:=b+1;
end;
If (pula=true) then
break;
j:=j+1;
Until ((j>n)or(a>(z*n)));
i:=i+1;
Until (i>m);
i:=1;
Repeat
j:=1;
Repeat
Write(mat[i,j],' ');
j:=j+1;
if (j>n) then
writeln;
Until (j>n);
i:=i+1;
Until (i>m);
Writeln;
Writeln;
i:=1;
Repeat
j:=1;
Repeat
Write(matf[i,j],' ');
j:=j+1;
if (j>z*n) then
writeln;
Until (j>z*n);
i:=i+1;
Until (i>z*m);
End.

Se alguém puder me dar um Help agradeço!

Abraços.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá MattStark.

1) Escolha do laço de repetição

Como alguns laços são de quantidades pré-determinadas, recomendam-se o uso do for para esses casos.

Ex.:

Em vez de:

   Repeat
j:=1;
Repeat
writeln ('Informe,na posição:',i,' e ',j);
readln (mat[i,j]);
j:=j+1;
Until j>n;
i:=i+1;
Until i>m;

Para algo como:

for i:=1 to m do
for j:=1 to n do
begin
writeln ('informe,na posição:',i,' e ',j);
readln (mat[i,j]);
end;

Creio que essa modificação já vai simplifica bastante o código..

2) Regra de geração da matriz nova

Você precisa revisar esse a lógica para gerar os novos dados. No exemplo de uma matriz A 2x2 e gerando uma matriz B 4x4, os valores ficaram assim:

B11 = A11
B12 = A11
B13 = A12
B14 = A12

B21 = A11
B22 = A11
B23 = A12
B21 = A12

B31 = A21
B32 = A21
B33 = A22
B34 = A22

B41 = A21
B42 = A21
B43 = A22
B44 = A22

Daí, precisa criar o algoritmo baseado nesta regra.

***

Então, eu não analisei o seu código, mas provavelmente os valores estão vindo com 0 pois as posições não estão sendo alteradas.

Obs.: No Pascal, normalmente, quando o programa é iniciado todos as variáveis são automaticamente zeradas.

Link para o comentário
Compartilhar em outros sites

MattStark,

Você começa a entender melhor esse problema quando passa a olhar a matriz original como uma matriz de matriz, onde cada elemento da matriz original seria uma matriz 1x1.

Quando você informa o valor de ampliação (2, por exemplo), você passa a ter submatrizes de 2x2 (2 multiplicado por 1x1) representando cada posição da matriz original. Então (aqui a dica é valiosa), você vai precisar de 4 laços (pode ser o for). Dois mais externos para percorrer a matriz original e dois mais internos para trabalhar cada elemento da matriz original e preencher a matriz resultante/final.

Realmente você vai precisar pensar um pouquinho para calcular e usar corretamente esses índices nas matrizes final e origem.

Boa sorte com o desafio, :D

NW

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...