Ir ao conteúdo
  • Cadastre-se

Matriz em pascal


wagnernevony

Posts recomendados

  • Membro VIP

Boa gente!!!

To fritando um pouco os miolos e nao to conseguindo fazer um trabalho que tenho que apresentar na facul.

será que alguem poderia me dar um help.

O enunciado é o seguinte.

1. Deverá ser criado usando a linguagem Pascal e ser compilável pelo programa Turbo Pascal;

2. O usuário deve entrar com a ordem da matriz MxN (M entre 2 e 7, N entre 2 e 7, independentes), bem como com os valores de seus elementos reais;

3. A leitura dos elementos deve ser feita na mesma linha, sendo que a cada leitura o elemento deve ser impresso na tela de forma tabulada;

4. A soma das linhas deve ser mostrada na tela como coluna adicional, bem como a soma das colunas (incluindo a coluna “soma”) deve ser mostrada como linha adicional. Valores com “3.1” algarismos.


uses crt;

var matriz:array[1..7,1..7] of real;
L,C,I,J:integer;
soma_linha,soma_col:real;
S:real;
BEGIN
ClrScr;
writeln('<<<--PROGRAMA SOMA LINHAS E COLUNAS DE UMA MATRIZ [2..7]-->>>');
writeln;
repeat
gotoxy(1,3);
writeln('INFORME A QUANTIDADE DE LINHAS : ');
gotoxy(33,3);
readln(L);
until (L > 1) and (L < 8);
repeat
gotoxy(1,3);
writeln('INFORME A QUANTIDADE DE COLUNAS: ');
gotoxy(33,3);
readln(C);
until (C > 1) and (C < 8);

Writeln('Informe os elementos da matriz [',L,',',C,']:');
For I:=1 to L do begin
For J:=1 to C do begin
GotoXY(1,7);
Write('A(',I,',',J,')= ');
GotoXY(9,7);
Readln(Matriz[I,J]);
end;
end;

writeln('EIS A MATRIZ INFORMADA ?: ');
gotoxy(2,11);
write('A =');
for i:=1 to L do begin
gotoxy(7,10+i);
writeln('ڧ);
for j:= 1 to L do begin
gotoxy(2+j*8,10+i);
write(matriz[i,j]:6:1);
end;

end;

{SOMA DA LINHA}

for j:=1 to L do begin
gotoxy(33,10+j);
Soma_linha:= soma_linha + matriz[L,j];
writeln(' ',soma_linha:6:1);
end;

{FIM DA SOMA DA LINHA}

{SOMA DA COLUNA}
for I:=1 to C do begin
gotoxy(11,14+i);
S:= S + matriz[I,C];
writeln(' ',S:6:1);
end;


readkey;
END.
program smat;

(este é o codigo ate onde eu tentei fazer, ainda falta muita coisa, eu acho. Se alguem puder me ajudar , agradeço)

Olá,

Vamos por partes..

1) Leitura das coordenadas

program smat;
uses
crt;
var
matriz :array[1..7,1..7] of real;
L,C,I,J :integer;
soma_linha,
soma_col :real;
S :real;
BEGIN
ClrScr;
writeln('<<<--PROGRAMA SOMA LINHAS E COLUNAS DE UMA MATRIZ [2..7]-->>>');
writeln;

repeat
gotoxy(1,3);
writeln('INFORME A QUANTIDADE DE LINHAS : ');
gotoxy(33,3);
readln(L);
{//until (L > 1) and (L < 8);}
[COLOR="Red"]until (L > 2) and (L < 7);[/COLOR]

repeat
gotoxy(1,3);
writeln('INFORME A QUANTIDADE DE COLUNAS: ');
gotoxy(33,3);
readln(C);
{//until (C > 1) and (C < 8);}
[COLOR="Red"]until (C > 2) and (C < 7);[/COLOR]

Tem um pequeno detalhe na formulação da condição do until, pois como ele diz

entre 2 e 7
tem que ver se o "2" e o "7" também fazem parte dos números ou não, ou seja, "entre" que dizer "em meio" ou "dentro de", sendo assim os números naturais "entre" 2 e 7 são 3, 4, 5 e 6. Se for assim deve ser corrigido como coloquei acima. Senão, de qualquer forma teria que corrigir para ">=2" e "<=7".

Veja que

(C > 1) and (C < 8)

e

(C >= 2) and (C <= 7);

são duas coisas diferentes. De certo modo no programa, o resultado será o mesmo, já que só aceitaria números naturais. (por exemplo, 1.5 é maior que 1, mas não estaria no intervalo de 2 a 7)

OBS.: Eu tenho dúvidas sobre essa definição de "entre" e "no intervalo" (se inclui os números das extremidades ou não). Ou seja, eu entendo que não faz, mas pelo contexto eu acredito que faça parte sim. Na dúvida pergunte ao professor. (inclusive é até interessante você comentar isso com ele... pesquise sobre isso. Mas independente de qualquer modelo, basta só corrigir pra um ou pra outro).

OBS2.: Só para deixar claro. Ser um coisa ou outra faz muuuuita diferença. Você tem que saber qual o certo. Não dá para "resolver" um problema sem ao menos entendê-lo corretamente. (resolver o problema "errado" não adianta ^_^)

2) Leitura dos valores e impressão da tabela

A leitura dos elementos deve ser feita na mesma linha, sendo que a cada leitura o elemento deve ser impresso na tela de forma tabulada;

Veja que ele pede para fazer a impressão "imediatamente" a cada leitura, ou seja, a medida que for lendo já vai imprimindo.

Para fazer as duas coisas ao mesmo tempo é relativamente fácil. Basta juntar uma coisa com a outra. A questão é justamente na hora de imprimir a tabela. Se conseguir imprimir separado, você não terá problemas de imprimir junto.

3) Soma das linhas e das colunas

 {SOMA DA LINHA}
for j:=1 to L do begin
gotoxy(33,10+j);
Soma_linha:= soma_linha + matriz[L,j];
writeln(' ',soma_linha:6:1);
end;

{SOMA DA COLUNA}
for I:=1 to C do begin
gotoxy(11,14+i);
S:= S + matriz[I,C];
write(' ',S:6:1);
end;
readkey;

As fórmulas estão incompletas. Veja que numa matriz MxN existem "M" linhas e "N" colunas, ou seja, para as linhas serão "M" cálculos, e para colunas outros "N". :D (resumindo: também será um for dentro de um for para cada caso.)

OBS.: Não dá para somar os valores e posicionar ao mesmo tempo. São duas etapas diferentes. Primeiro faz a soma, depois imprime. Ex.: Numa matriz 5x3, para somar a linha 1, é preciso somar os valores de (1,1), (1,2), (1,3), para depois exibir esse valor na posição (1,4).

4) Posicionamento para impressão das somas

Ai será preciso usar a criatividade. Mas vou dar uma dica simples: basta imaginar, mais ou menos, que a matriz passará a ser M+1xN+1. (resumindo, as somas das linhas ficarão na coluna "C+1" e das colunas na linha "L+1", como demonstrado no item 3)

***

Veja ai, qualquer coisa é só postar.

Abraços

Link para o comentário
Compartilhar em outros sites

Opa,

Se não estou enganado em relação ao código, acho que o comando repeat-until está escrito de forma errada, pois ele repete enquanto a condição for falsa. Creio eu então que deveria ser:

until (L < 2) and (L > 7)

e no segundo:

until (C < 2) and (L > 7)

Abraço a todos.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
Opa,

Se não estou enganado em relação ao código, acho que o comando repeat-until está escrito de forma errada, pois ele repete enquanto a condição for falsa. Creio eu então que deveria ser:

until (L < 2) and (L > 7)

e no segundo:

until (C < 2) and (L > 7)

Abraço a todos.

Link para o comentário
Compartilhar em outros sites

Gente obrigado pelos comentarios e helps que me deram. Irei testar mais um tanto aqui pra ver o que consigo, qualquer novidade ou duvida eu posto aqui pra gente debater.

AH, a respeito do until entre 2 e 7 eles estão inclusos, então o que havia colocado esta correto.

A minha duvida mesmo é colocar pra imprimir na tela ao mesmo tempo que cada um é informada e em forma tabulada.

E claro a soma das linha e colunas que ainda nao consegui fazer corretamente.

Abraços e Obrigado.

Pessoal com a ajuda que me deram, conseguir fazer a impressao ao mesmo tempo que vai colocando os dados, mas ainda estou me debatendo com a soma das linhas e das colunas e imprimir esta soma ao lado da matriz informada.

(grato estilingueAtomico)

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Gente obrigado pelos comentarios e helps que me deram. Irei testar mais um tanto aqui pra ver o que consigo, qualquer novidade ou duvida eu posto aqui pra gente debater.

AH, a respeito do until entre 2 e 7 eles estão inclusos, então o que havia colocado esta correto.

A minha duvida mesmo é colocar pra imprimir na tela ao mesmo tempo que cada um é informada e em forma tabulada.

E claro a soma das linha e colunas que ainda nao consegui fazer corretamente.

Abraços e Obrigado.

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!