a_gomes89 Posted February 20, 2013 at 08:07 PM Report #496360 Posted February 20, 2013 at 08:07 PM (edited) boa noite, Sou estudante e preciso de ajuda na resolução de um problema. Sei que a versão 6 para a versão 10 e um pouco diferente mas penso que neste caso não há problema. Portanto o enunciado do problema é: Elabore um programa que declara um array de inteiro com 100 posições. O programa deve ter um botão “Preenche” que permite preencher o array de 100 posições com o valor da sua posição acrescida de uma unidade (na posição 0 é inserido o 1). Deve existir um segundo botão, SOMA, que, quando selecionado, soma nas primeiras 50 posições do array o valor das últimas 50. Ou seja, guarda na posição 0 o resultado da soma do valor que está na posição 0 com o da posição 50, , na 1 guarda o resultado da soma do valor que está na posição 1 com o valor da 51, etc. Deve existir um terceiro botão, MIRROR, que, quando selecionado, copia as primeiras 50 posições do array para as últimas 50 posições, invertendo a ordem dos valores na segunda metade do array. Ou seja, o valor da primeira posição é copiado para a última, da segunda para a penúltima, etc. A solução que comecei por fazer foi: Public Class Form1 Private Sub ClearList() ListBox1.Items.Clear() End Sub Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click ClearList() Dim i(99) As Integer Dim total As Integer i(0) = "1" For total = 0 To 99 ListBox1.Items.Add(i(total)) Next End Sub End Class mas o resultado desta solução são 99 valores todos em 0 excepto a primeira posição que esta em 1. Alguém me poderá ajudar a solucionar este exercício? Obrigado Edited February 20, 2013 at 09:15 PM by thoga31 GeSHi
thoga31 Posted February 20, 2013 at 09:19 PM Report #496374 Posted February 20, 2013 at 09:19 PM (edited) Então como queres que o programa adivinhe os restantes 99 valores? Dás-lhe o primeiro, e depois mandas imprimir os seus valores numa ListBox: o programa não funciona com bolas de cristal. Tens de preencher a Array toda com um ciclo For. E mais, recomendo que revejas bem a tua atribuição de uma String a uma variável do tipo Integer: Dim i(99) As Integer ' Um array de Integer i(0) = "1" ' Atribuis uma String - como é isto? Sei que a versão 6 para a versão 10 e um pouco diferente mas penso que neste caso não há problema. Tenho uma dúvida sobre como cozinhar uma feijoada, pelo que vou colocar a questão na secção de saladas. Se a dúvida é em VB.NET, então falamos na secção de VB.NET 😉 Edited February 20, 2013 at 09:20 PM by thoga31 Knowledge is free!
a_gomes89 Posted February 20, 2013 at 10:08 PM Author Report #496381 Posted February 20, 2013 at 10:08 PM obrigado pela a ajuda, realmente foi um gralha muito grande onde meti o tópico. ok então como faço o ciclo? obrigado pelo conselho vou então rever a atribuição do tipo de variável. cumprimentos
thoga31 Posted February 20, 2013 at 10:14 PM Report #496384 Posted February 20, 2013 at 10:14 PM (edited) ok então como faço o ciclo? Pensa lá um pouco. Tens um Array de 100 elementos, em que cada um tem atribuído a si o valor do seu próprio índice. Ou seja, array(i) = i obrigado pelo conselho vou então rever a atribuição do tipo de variável. A atribuição da variável, não é do tipo da variável. A revisão é muito simples: se tens um Array de Integer, atribuis um Integer. Edited February 20, 2013 at 10:14 PM by thoga31 Knowledge is free!
a_gomes89 Posted February 20, 2013 at 11:08 PM Author Report #496400 Posted February 20, 2013 at 11:08 PM ok obrigado pela a ajuda
a_gomes89 Posted February 21, 2013 at 06:15 PM Author Report #496512 Posted February 21, 2013 at 06:15 PM (edited) boa tarde novamente consegui chegar a conclusão da primeira e segunda parte do problema, a solução é esta: Public Class Form1 Dim array(99) As Integer Dim arraysoma(49) As Integer Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click array(0) = 1 For i = 0 To 99 array(0 + i) = array(0) + 1 * i ListBox1.Items.Add(array(i)) Next End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click arraysoma(0) = array(0) + array(50) For i = 0 To 49 arraysoma(0 + i) = array(0 + i) + array(50 + i) MsgBox("resultado" & arraysoma(0 + i)) Next Close() End Sub End Class agr preciso de ajuda para o terceiro ponto do exercicio que e a para o botão mirror, podem me ajudar? Edited February 21, 2013 at 09:49 PM by thoga31 GeSHi
thoga31 Posted February 21, 2013 at 09:52 PM Report #496547 Posted February 21, 2013 at 09:52 PM (edited) Tens códigos que podem ser optimizados e/ou são despropositados. array(0 + i) = array(0) + 1 * i arraysoma(0 + i) = array(0 + i) + array(50 + i) Porquê array(0) + 1*i? Não basta i? Porquê 1*i? Não basta i? Porquê 0+i? Não basta i? Para o mirror tens de fazer um processo de troca com a ajuda de uma variável auxiliar. Como trocas 2 valores de uma array entre si? Por exemplo, colocar o valor da posição 13 na posição 45, e vice-versa? Edited February 21, 2013 at 09:53 PM by thoga31 Knowledge is free!
a_gomes89 Posted February 21, 2013 at 10:33 PM Author Report #496563 Posted February 21, 2013 at 10:33 PM (edited) hum... obrigado realmente tinha código a mais. entao com a variavel auxiliar por exemplo: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim primeiro As Integer primeiro = CInt(InputBox("insira valor inteiro", "valores inteiros")) Dim i As Integer For i = 1 To 50 array(50) = primeiro array(50 - i) = primeiro + i MsgBox("o resultado e " & array(50 - i)) Next End Sub é isto? Edited February 21, 2013 at 10:33 PM by thoga31 GeSHi
thoga31 Posted February 21, 2013 at 10:37 PM Report #496566 Posted February 21, 2013 at 10:37 PM Isso é que é uma troca de valores entre dois índices de uma Array? INÍCIO: Array(13) = 236 Array(45) = 754 FINAL: Array(13) = 754 Array(45) = 236 Como implementas uma troca destas? Knowledge is free!
a_gomes89 Posted February 21, 2013 at 11:03 PM Author Report #496579 Posted February 21, 2013 at 11:03 PM Acho que não, o que o código que eu pus faz é o seguinte: o programa pede ao utilizador que insira um valor inteiro e este valor é somado a posição i que o seu resultante(valor + i) entra na posição do array - i. nunca estive tão perdida como agora, não sei como implemento a troca, percebi a lógica mas não sei como implementa-la. se já tenho dificuldades a preencher as posições, quanto mais fazer trocas entre elas.
thoga31 Posted February 21, 2013 at 11:21 PM Report #496583 Posted February 21, 2013 at 11:21 PM Acho que não, o que o código que eu pus faz é o seguinte: o programa pede ao utilizador que insira um valor inteiro e este valor é somado a posição i que o seu resultante(valor + i) entra na posição do array - i. Isto não é o pedido no enunciado. nunca estive tão perdida como agora, não sei como implemento a troca, percebi a lógica mas não sei como implementa-la. se já tenho dificuldades a preencher as posições, quanto mais fazer trocas entre elas. "Preencher" as posições é como "preencher" uma outra variável qualquer. A única diferença é que tens uma lista de variáveis, digamos assim. Uma Array de 100 elementos contém dentro de si o equivalente a 100 variáveis "isoladas". O acesso a cada elemento é feito através do índice. Se lista for uma Array de Integers com 100 elementos, então lista(13) é o 14º elemento da Array (não esquecer que o 1º elemento é dado pelo índice 0). Antes de passarmos à troca de valores em Arrays, resolve-me primeiro este pequenino exercício: Considera as variáveis A e B, do tipo Integer, às quais estão atribuídos valores arbitrários. Troque os valores entre as variáveis. Código inicial: Dim A As Integer = 25 Dim B As Integer = 56 ' Código para trocar os valores...? ' No final, A = 56 e B = 25. Knowledge is free!
a_gomes89 Posted February 21, 2013 at 11:43 PM Author Report #496588 Posted February 21, 2013 at 11:43 PM (edited) eu devo estar a complicar muito mas aqui vai: Public Class Form1 Dim a As Integer Dim b As Integer Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load a = 25 b = 56 End Sub Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click If CheckBox1.Checked = True Then b = a MsgBox("" & b) ElseIf CheckBox1.Checked = False Then b = 56 MsgBox("" & b) ElseIf CheckBox2.Checked = True Then a = b MsgBox("" & a) ElseIf CheckBox2.Checked = False Then a = 25 MsgBox("" & a) End If End Sub End Class Edited February 21, 2013 at 11:45 PM by thoga31 GeSHi
thoga31 Posted February 21, 2013 at 11:48 PM Report #496589 Posted February 21, 2013 at 11:48 PM CheckBoxes? Para quê? No final não tenho os valores trocados... não tenho nada daquilo que pedi. E essa dependência do GUI tem de desaparecer, uma coisa é o algoritmo, outra é o GUI. Treina antes em Console Applications. Aquilo que eu pedi pode muito bem ser escrito de forma independente do GUI. Vê se o seguinte código faz aquilo que eu pedi: trocar os valores entre as variáveis. ' Valores iniciais Dim A As Integer = 25 Dim B As Integer = 56 ' Troca das variáveis A = B B = A ' Os valores estão trocados?? Knowledge is free!
a_gomes89 Posted February 21, 2013 at 11:59 PM Author Report #496590 Posted February 21, 2013 at 11:59 PM (edited) como tinha mal modifiquei Public Class Form1 Dim a As Integer = 25 Dim b As Integer = 52 Dim baba As Integer Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load baba = a a = b b = baba MsgBox("" & a & b) End Sub End Class Edited February 22, 2013 at 12:24 AM by thoga31 GeSHi
thoga31 Posted February 22, 2013 at 12:26 AM Report #496592 Posted February 22, 2013 at 12:26 AM Exactamente! Agora pega nesse código e transforma-o para que troque os valores de dois elementos de uma Array. MsgBox("" & a & b) Para que serve o "" &? Knowledge is free!
a_gomes89 Posted February 22, 2013 at 12:42 AM Author Report #496594 Posted February 22, 2013 at 12:42 AM (edited) Public Class Form1 Dim a As Integer = 25 Dim b As Integer = 52 Dim baba() As Integer Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load baba(0) = a baba(a) = b baba(b) = baba(0) End Sub End Class Edited February 22, 2013 at 12:42 AM by a_gomes89
a_gomes89 Posted February 22, 2013 at 12:53 AM Author Report #496595 Posted February 22, 2013 at 12:53 AM como nao sei se esta bem pensei melhor e pus assim: Public Class Form1 Dim a As Integer = 25 Dim b As Integer = 52 Dim array() As Integer Dim baba As Integer Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load Dim i As Integer array(baba) = a array(a) = b array(b) = array(baba) For i = 0 To 24 array(a) = b Next For i = 0 To 51 array(b) = baba Next End Sub
Dominick Posted February 22, 2013 at 02:40 PM Report #496640 Posted February 22, 2013 at 02:40 PM (edited) Parece-me que estás a afastar-te do pedido no enunciado. Pelo que percebi do enunciado, o pretendido é que a 2ª metade do array seja igual á 1ª metade invertida (por isso é que o botão pedido chama-se "MIRROR", que significa espelho). Exemplo: Um array com os valores 1-2-3-4-5-6-7-8 passa a ser 1-2-3-4-4-3-2-1. Daí o efeito espelho, a 2ª metade é igual á 1ª mas invertida. Basta então fazer um ciclo para correr a primeira metade e copiar os valores para a segunda. Algo do genero: For i = 0 to 49 Array(99-i)=Array(i) Next i Bom trabalho, e espero ter ajudado! Edited February 22, 2013 at 09:09 PM by thoga31 GeSHi
thoga31 Posted February 22, 2013 at 09:36 PM Report #496700 Posted February 22, 2013 at 09:36 PM @Dominick, não sei se leste o tópico todo, mas tendo o facto de @a_gomes89 ter dificuldades em Arrays, tenho vindo a tentar dar uns conhecimentos genéricos sobre o assunto antes de chegar a esse ponto 😉 @a_gomes89, no teu código para a troca de valores em Arrays baralhaste os índices com os valores de cada elemento. Tem em atenção o seguinte: Array(índice) = valor. Por isso, a troca de valores entre variáveis é dada por: aux = Lista(0) Lista(indice1) = Lista(indice2) Lista(indice2) = aux Posto isto, a questão que se coloca é: para o mirror é preciso fazer trocas? Não. Então mas porque debati este assunto? Porque é importante distinguir o mirror da troca de valores. No mirror tu queres algo como isto: 1 <-- índice 0 2 3 4 5 <-- ponto de 5 <-- simetria 4 3 2 1 <-- índice final (neste caso, 8) Ou seja, sendo comp o "comprimento" da Array: Array(comp) = Array(0) Array(comp - 1) = Array(1) Array(comp - 2) = Array(2) 'generalizando ... Array(comp - i) = Array(i) Como traduzir isto num ciclo? É tornar a variável i no iterador do ciclo For. O @Dominick já deu aí uma excelente dica (aka a resposta ao problema). Knowledge is free!
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now