Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
MattStark

Matriz - Pascal!

Recommended Posts

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.

Editado por Simon Viegas
Por favor, ao postar um código utilizem a tag CODE (Botão #). Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
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

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×