Logo Hardware.com.br
Tricolasso
Tricolasso Novo Membro Registrado
45 Mensagens 0 Curtidas

Algoritmo sobre Matrizes

#1 Por Tricolasso 28/06/2004 - 16:44
Boa tarde pessoal é o seguinte, alguém poderia me ajudar em como fazer um algoritmo, pode ser em linguagem C mesmo, que resolva os seguintes problemas:

1)Dada uma matriz de ordem M(LxC) de elementos. Preenchidas com valores 2 e 4, determinar qual a linha que possui o maior numeros de 2,
retornando o valor soma dessa linha assim, como qual linha possui o mesmo
Ex: Numa matriz de ordem 4x5
|2 4 4 4 4|
|2 2 2 4 4|
|2 2 4 4 4|
|4 2 4 4 2|

Ele verifica linha por linha, para verificar qual delas, possui a quantidade maior de 2 , retornando que a 2º linha possui tres numeros 2, dai ele retorna como saida o valor da soma dessa linha que eh: soma=14 e linha=2

O segundo algoritmo seria o seguinte:

2)Dada uma matrix de ordem M(nxm), somar os elementos de cada linha, e depois comparar cada soma , para ver qual possui maior valor, e retornar qual a linha que possui a maior soma.
Ex: Numa matriz de ordem 3x4
|2 4 0 1| - soma dos elementos da 1ª linha = 7
|2 2 8 1| - soma dos elementos da 2º linha = 13
|4 4 8 8| - soma dos elementos da 3º linha = 24
dai ele compara os valores da soma uma a uma, e retorna mostrando que é a linha = 3 é a que a contem a maior soma

Parece ser bem simples o algoritmo, mas possuo uma dificuldade enorme em programação . Quem puder quebrar esse galho para mim, ficaria muito agradecido.

Valew
Tricolasso
Edney
Edney General de Pijama Registrado
5.8K Mensagens 57 Curtidas
#3 Por Edney
29/06/2004 - 11:25
Hum...
O primeiro pode ser assim. Vc vai fazer um loop que vai mover somente os valores da primeira linha pulando cada coluna. Vai ter que fazer um if (decisão) "se ij == 2 -> conta++. Esse conta++ tem que ser uma variável que vai fixar o valor dessa primeira linha contada. O mesmo deve ser feito para as linhas seguintes. Depois vc deve fazer outro loop para comparar qual das variáveis é a maior. Depois é somar os valores da linha "vencedora' fazendo ou outro loop. Vc tem que "pensar" como um computador, fazendo tudo ordenadamente.
PhD in biomedical engineering, medical radiology technologist, technician in electronics and programmer in computacional nuclear physics simulation. (i7 2600|16Gb Vengeance|GA-H67A-UD3H-B3| 2X1TB Raid 0+1Tb| GF GTX 650| EMU-0404| Pioneer BDR-207| C3Tech 500W PFC)
jqueiroz
jqueiroz Cyber Highlander Registrado
104K Mensagens 5.7K Curtidas
#4 Por jqueiroz
29/06/2004 - 15:53
No primeiro caso, vc pode pensar de outro jeito: são só dois valores possíveis, certo? 4 e 2. Ora, a linha que tem mais números 2 será a que tem menor soma então. Isso elimina a necessidade do "if" dentro do loop interno, bastando somar as linhas.


seja uma matriz M com L linhas e C colunas.
sejam dois valores possíveis para cada posição da matriz, V1 e V2, sendo V1 < V2.

seja P um valor inteiro, inicializado com -1.
seja MinS um valor inteiro, inicializado com C * V2.

para i variando entre 1 e L, faça:
seja S um valor inteiro, inicializado com zero.
para j variando entre 1 e C, faça:
some M[i,j] a S;
fim-para.
se S for menor do que MinS, faça:
MinS recebe o valor de S;
P recebe o valor de i;
fim-se.
fim-para.

A linha com mais valores V1 é a linha P, que tem soma MinS.


Resta ver como fazer para encontrar mais de uma linha, no caso de empate.

No segundo caso, o algoritmo é quase igual:


seja uma matriz M com L linhas e C colunas.

seja P um valor inteiro, inicializado com -1.
seja MaxS um valor inteiro, inicializado com 0.

para i variando entre 1 e L, faça:
seja S um valor inteiro, inicializado com zero.
para j variando entre 1 e C, faça:
some M[i,j] a S;
fim-para.
se S for maior do que MaxS, faça:
MaxS recebe o valor de S;
P recebe o valor de i;
fim-se.
fim-para.

A linha com a maior soma é a linha P, que tem soma MaxS.


Agora precisa codificar.
"chmod 777 nunca ajudou ninguém" (c) 2002-2021 JQueiroz/FGdH
Conheça o Blog do Zekke
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal