Jump to content
Sign in to follow this  
macinblack

Quadrado mágico dúvida

Recommended Posts

macinblack

Boas, estou a fazer um programa que é um quadrado mágico http://pt.wikipedia.org/wiki/Quadrado_m%C3%A1gico, so que ainda tenho algumas duvidas pois sou iniciante, o programa consiste em inserir o nº de colunas, os numero para preencher o quadrado e depois numa label ele diz se é quadrado mágico ou nao.

O código que já fiz vai até ao calculo dos valores das linhas e colunas da matriz mas ele só me calcula uma linha não percebo porque... agradecia ajuda pois tenho de entregar amanha xD

Public Class Form1

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btncalcular.Click, Button1.Click
       ' If (txtcoluna.Text <> 0 + txtcoluna.Text > 1) Then
       If (txtcoluna.Text Mod 2 = 0) Then
           MessageBox.Show("Só podes colocar um número ímpar até 49")
       Else '
           Dim linhas, colunas, cont As Integer

           linhas = txtcoluna.Text + 1
           colunas = linhas
           cont = txtcoluna.Text
           Dim quadrado(linhas, colunas) As Integer
           lerMatriz(quadrado, cont)
       End If
       ' Else
       '  MessageBox.Show("Tens de colocar nº ímpar maior que 1")
       'End If
   End Sub
   Sub lerMatriz(ByVal quadrado(,) As Integer, ByVal cont As Integer)
       Dim l, c, aux1, x As Integer
       Dim linha As String
       lstquadrado.Items.Clear()
       For l = 0 To cont - 1
           linha = ""
           For c = 0 To cont - 1
               quadrado(l, c) = Val(InputBox("Elemento" & (l + 1) & "," & (c + 1)))
               linha = linha & quadrado(l, c) & Chr(9)
           Next
           lstquadrado.Items.Add(linha)
       Next
       'contagem linhas
       For x = 0 To x = cont - 1
           aux1 = Nothing
           aux1 = quadrado(x, 0)
           For c = 1 To cont - 1
               aux1 = quadrado(x, c) * aux1
               quadrado(x, cont) = aux1
           Next
       Next

       'contagem colunas
       For x = 0 To x = cont - 1
           aux1 = Nothing
           aux1 = quadrado(0, x)
           For l = 1 To cont - 1
               aux1 = quadrado(l, x) * aux1
               quadrado(cont, x) = aux1
           Next
       Next
       ' diagonais
       'Se o quadrado é  mágico
   End Sub

Edited by thoga31
GeSHi

Share this post


Link to post
Share on other sites
macinblack

Não nao é isso (ou entao nao percebi) :/ a minha duvida esta em como multiplicar das linhas e colunas da matriz que criei

Ex: 2 7 6 =15

9 5 1 =15

4 3 8 =15

= = = =15

15 15 15

eu quero multiplicar as linhas/colunas/diagonal dando um resultado pois estou a usar 3 das 4 colunas/linhas, sendo a ultima para o resultado

Edited by macinblack

Share this post


Link to post
Share on other sites
acao

boas

verifica no ciclo for contagem linha e coluna «For x = 0 To x = cont - 1»

penso que não podes ter a variavel x em for e em to.

cumps

acao

Edited by acao

Share this post


Link to post
Share on other sites
thoga31

aux1 = Nothing
aux1 = quadrado(0, x)

Duas coisas:

1) Nunca se atribui a uma variável o valor Nothing excepto em casos excepcionais. Neste caso atribui-se 0 (zero).

2) Se vais atribuir a aux1 um valor dado pela função quadrado, porque fazes antes a atribuição com Nothing?


Knowledge is free!

Share this post


Link to post
Share on other sites
macinblack

exato é issop que me estava a falhar, o nothing pus porque antes tinha posto 0 e ele nao "zerou", mas devido ao meu erro do x :) obrigado pelo reparo aos dois, espero nao ter mais problemas :)

Share this post


Link to post
Share on other sites
veaoum

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btncalcular.Click, Button1.Click
	' If (txtcoluna.Text <> 0 + txtcoluna.Text > 1) Then
	If (txtcoluna.Text Mod 2 = 0) Then
		MessageBox.Show("Só podes colocar um número ímpar até 49")
	Else '
		Dim linhas, colunas, cont As Integer

		linhas = txtcoluna.Text + 1
		colunas = linhas
		cont = txtcoluna.Text
		Dim quadrado(linhas, colunas) As Integer
		lerMatriz(quadrado, cont)
	End If
	' Else
	'  MessageBox.Show("Tens de colocar nº ímpar maior que 1")
	'End If
End Sub

Boas não tem muito haver com o teu pedido inicial mas não pode deixar de ver algumas coisas da forma que tens o teu código permites qualquer ímpar e sem limitação. deverias ter algo do género:

If (txtcoluna.Text Mod 2 = 0 and txtcoluna.Text>0 and txtcoluna.Text<50 ) Then

Assim como não intento o porque de teres duas/três variáveis com exactamente o mesmo valor visto que nunca vais deixar de manter uma matriz quadrada. fazias exactamente o mesmo assim:

		Dim indice As Integer
		indic = txtcoluna.Text + 1
		Dim quadrado(lindice, indice) As Integer
		lerMatriz(quadrado, indice-1)

até penso que seria melhor se definisses o quadrado apenas na função lermatriz.

Não nao é isso (ou entao nao percebi) :/ a minha duvida esta em como multiplicar das linhas e colunas da matriz que criei

Ex: 2 7 6 =15

9 5 1 =15

4 3 8 =15

= = = =15

15 15 15

eu quero multiplicar as linhas/colunas/diagonal dando um resultado pois estou a usar 3 das 4 colunas/linhas, sendo a ultima para o resultado

falas em multiplicar mas esse exemplo soma:

Ex: 2 +7 +6 + =15

9 +5 +1 + =15

4 +3 +8 + =15

= = = =15

15 15 15

o teu código está a multiplicar.

Edited by veaoum

Share this post


Link to post
Share on other sites
acao

	'contagem linhas
	For x = 0 To x = cont - 1
		aux1 = Nothing
		aux1 = quadrado(x, 0)
		For c = 1 To cont - 1
			aux1 = quadrado(x, c) * aux1
			quadrado(x, cont) = aux1
		Next
	Next

	'contagem colunas
	For x = 0 To x = cont - 1
		aux1 = Nothing
		aux1 = quadrado(0, x)
		For l = 1 To cont - 1
			aux1 = quadrado(l, x) * aux1
			quadrado(cont, x) = aux1
		Next
	Next

aqui você tem a inf trocada 'contagem colunas deve dizer contagem linhas e viceversa

e isto

aux1 = Nothing

aux1 = quadrado(0, x)

não esta ca a fazer nada

'contagem linhas
   For x = 0 To cont - 1
			aux1 = 0
			For l = 1 To cont - 1
			aux1 = aux1 + quadrado(l, x)
			Next
		   quadrado(cont, x) = aux1
  Next

para contagem na diagonal se pretender

 
'contagem diagonal
   aux1 = 0
   For x = 0 To  cont - 1
			aux1 = aux1 + quadrado(x, x)
   Next
   quadrado(cont, cont) = aux1

cumps

acao

Edited by acao

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.