Ir para o conteúdo
macinblack

Quadrado mágico dúvida

Mensagens Recomendadas

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

Editado por thoga31
GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Editado por macinblack

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Editado por acao

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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! | Occasional Fortnite player

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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 :)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Editado por veaoum

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Editado por acao

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.