Springen naar inhoud

[informatica] arrays visual basic


  • Log in om te kunnen reageren

#1

netwerker

    netwerker


  • 0 - 25 berichten
  • 5 berichten
  • Gebruiker

Geplaatst op 04 juni 2009 - 15:00

"M",1958,"S"
"V",1958,"J"
(...)
"V",1937,"P"
"M",1936,"P"


In een tekstbestand bevinden zich, per record, het geslacht van een persoon, het geboortejaar van een persoon en een categorie (S=student, J=job, W=werkloos, P=pensioen).

Ik heb het tekstbestand in een array gestoken:

geslacht(index) as string
geboortejaar(index) as integer
categorie(index) as string

Ik wil het volgende resultaat in het tekstvak van een formulier verkrijgen:

-------- S J W P
< 1940 0 6 0 10
< 1950 0 2 0 0
< 1960 9 5 4 3
< 1970 4 7 3 0
--1980 1 1 0 0

Maak gebruik van een array om de resultaten op te tellen. De resultaten worden in een tekstvak (zonder de stippellijnen) getoond.

Mijn vraag is hoe tel ik de resultaten op in een array ?

Bedankt!!!

Veranderd door Jan van de Velde, 04 juni 2009 - 15:22


Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

Jan van de Velde

    Jan van de Velde


  • >5k berichten
  • 44856 berichten
  • Moderator

Geplaatst op 04 juni 2009 - 15:21

Dag Netwerker, welkom ;) op het forum Huiswerk en Practica.

Jij wilt vlot hulp. Dat is alleen goed mogelijk als je daar zelf wat voor doet.

Naast de algemene regels van dit forum hebben we voor dit huiswerkforum een paar speciale regels en tips.
Die vind je in de huiswerkbijsluiter

In die huiswerkbijsluiter staat bijvoorbeeld:

Quote

VAKGEBIED-TAGS
Plaats het vakgebied waarop je vraag betrekking heeft tussen rechte haken in de titel.
bijv: [biologie] of [frans]. Zo blijft dit huiswerkforum overzichtelijk.

Hebben we even voor je gedaan. Denk je er de volgende keer zťlf aan??

ALS WIJ JE GEHOLPEN HEBBEN....
help ons dan eiwitten vouwen, en help mee ziekten als kanker en zo te bestrijden in de vrije tijd van je chip...
http://www.wetenscha...showtopic=59270

#3

Xenion

    Xenion


  • >1k berichten
  • 2606 berichten
  • Moderator

Geplaatst op 04 juni 2009 - 15:37

Ik snap niet wat je eigenlijk wil bereiken.

Wat ik je wel al kan meegeven is dat je je code wel wat 'mooier' kan maken.

Volgende declaraties werken in VB2008:

Enum GeslachtEn
		Man
		Vrouw
	End Enum
	Enum StatusEn
		Student
		Job
		Werkloos
		Pensioen
	End Enum
	Structure myPerson
		Private geslacht As GeslachtEn
		Private categorie As StatusEn
		Private geboortejaar As Integer
	End Structure
	Dim arrPersonen(100) As myPerson

Dan kan je dingen doen als:

With arrPersonen(1)
			.geslacht = GeslachtEn.Man
			.categorie = StatusEn.Student
			.geboortejaar = 1990
		End With

De enumeraties kunnen inderdaad ook als String, maar met een Structure werken is wel het minste wat je zou moeten doen.

Over enumeraties: http://visualbasic.a...et/a/enum01.htm

Veranderd door Xenion, 04 juni 2009 - 15:40


#4

jhnbk

    jhnbk


  • >5k berichten
  • 6905 berichten
  • VIP

Geplaatst op 04 juni 2009 - 16:49

Ik zou een 2d array maken met verticaal de jaartallen en horizontaal de mogelijkheden. Dan doorloop je de gegevens uit je bestand en tel/zet dan gegevens in die 2d array (uiteraard met integers zodat tellen mogelijk is)
Het vel van de beer kunnen verkopen vraagt moeite tenzij deze dood voor je neervalt. Die kans is echter klein dus moeten we zelf moeite doen.

#5

netwerker

    netwerker


  • 0 - 25 berichten
  • 5 berichten
  • Gebruiker

Geplaatst op 04 juni 2009 - 16:50

Ik snap niet wat je eigenlijk wil bereiken.


Mijn vraag is hoe tel ik de resultaten op in een array ? Hoe moet ik deze array opstellen ?

geboortejaar(index)
categorie(index)

vb

for i=0 to 100
for j=0 to 50

next
next

het resultaat dat ik wil bereiken staat in het tekstvak (zonder stippellijnen) van een formulier, het is een tabel met de som van de categorieen per periode:

---------------S------J------W-------P

< 1940-------0------6------0-------10

< 1950-------0------2------0--------0

< 1960-------9------5------4--------3

< 1970-------4------7------3--------0

1980----------1------1------0--------0

het bestand moet geopend en gelezen worden met een OpenFileDialog (geen probleem), waar ik probleem mee heb is via een array de 20 verschillende sommen maken die je in deze tabel ziet.

Veranderd door netwerker, 04 juni 2009 - 16:58


#6

netwerker

    netwerker


  • 0 - 25 berichten
  • 5 berichten
  • Gebruiker

Geplaatst op 04 juni 2009 - 17:11

Ik zou een 2d array maken met verticaal de jaartallen en horizontaal de mogelijkheden. Dan doorloop je de gegevens uit je bestand en tel/zet dan gegevens in die 2d array (uiteraard met integers zodat tellen mogelijk is)


laten we ervan uit gaan dat er 100 records zijn in dat tekstbestandje

geslacht(99),geboortejaar(99),categorie(99)

geslacht(99) heb ik vanaf nu niet meer nodig

blijft enkel geboortejaar(99) en categorie(99) over

nu moet ik een tabel krijgen met vertikaal de categorieen en horizontaal de periodes (<1940,<1950,<1960,<1970,1980-) waarbij de verschillende categorieen op de eerste rij staan en de perioden op de eerste kolom staan en array(0,0) leeg is en in de rest van de tabel staan de sommen ingevuld

hoe moet ik concreet beginnen, hoeveel tellers moet ik gebruiken, hoeveel variabelen, moet ik lus in een lus gebruiken of verschillende lussen achter elkaar, wat moet ik juist als eerste doen, enz

#7

Xenion

    Xenion


  • >1k berichten
  • 2606 berichten
  • Moderator

Geplaatst op 04 juni 2009 - 17:29

Ik zie nog steeds niet wat je precies wil optellen, maar misschien wordt het voor jou duidelijker met deze uitleg.


Stel je hebt een array Waarden(100) As Integer

Je wil die allemaal optellen:

Je maakt een variabele Resultaat As Integer en doet het volgende:
Resultaat = 0
For i = 1 To 100
	Resultaat = Resultaat + Waarden(i)
Next i

Als je bijvoorbeeld enkel de waarden van mensen van categorie Student wil optellen moet je iets in deze stijl doen:

Resultaat = 0
For i = 1 To 100
	If categorie(i) = "S" Then
		Resultaat = Resultaat + Waarden(i)
	End If
Next i

Ervan uitgaande dat de elementen met gelijke index in beide arrays overeenkomen (Daarom moet je eigenlijk met een structure werken.)

#8

jhnbk

    jhnbk


  • >5k berichten
  • 6905 berichten
  • VIP

Geplaatst op 04 juni 2009 - 17:33

Dim tabel(,) As Integer

Je zorgt dat deze tabel 4 kolommen heeft en evenveel rijen als verticale categorieŽn. Nu laat je een los lopen op ongeveer deze manier

For i=0 to 99
	hierin kies je, afhankelijk van categorie(i) het juiste kolomnummer
	Hetzelfde voor geboortejaar(i)
	Tel dan 1 bij in de bekomen cel

Next i
Het vel van de beer kunnen verkopen vraagt moeite tenzij deze dood voor je neervalt. Die kans is echter klein dus moeten we zelf moeite doen.

#9

netwerker

    netwerker


  • 0 - 25 berichten
  • 5 berichten
  • Gebruiker

Geplaatst op 04 juni 2009 - 18:25

Ik zie nog steeds niet wat je precies wil optellen


het verbaast me dat je het niet ziet

hier is het volledige tekstbestand

"M",1958,"S"
"V",1958,"J"
"M",1958,"J"
"V",1958,"S"
"V",1958,"W"
"M",1958,"S"
"M",1958,"W"
"V",1958,"P"
"V",1958,"S"
"V",1938,"J"
"M",1938,"J"
"M",1939,"J"
"M",1939,"P"
"M",1937,"P"
"V",1937,"P"
"M",1936,"P"
"V",1937,"P"
"V",1948,"J"
"M",1968,"S"
"V",1968,"J"
"V",1969,"J"
"V",1960,"J"
"M",1962,"W"
"M",1963,"S"
"V",1964,"W"
"V",1965,"W"
"M",1958,"S"
"M",1958,"S"
"V",1958,"J"
"M",1958,"J"
"V",1958,"S"
"V",1958,"W"
"M",1958,"S"
"M",1958,"W"
"V",1958,"P"
"V",1958,"S"
"V",1938,"J"
"M",1938,"J"
"M",1939,"J"
"M",1939,"P"
"M",1937,"P"
"V",1937,"P"
"M",1936,"P"
"V",1937,"P"
"V",1948,"J"
"M",1978,"S"
"V",1968,"J"
"V",1969,"J"
"V",1963,"J"
"M",1964,"S"
"M",1965,"S"
"V",1974,"J"
"V",1965,"J"
"M",1958,"J"


dit moet ik krijgen als resultaat (zonder stippellijnen):

---------------S------J------W-------P

< 1940-------0------6------0-------10

< 1950-------0------2------0--------0

< 1960-------9------5------4--------3

< 1970-------4------7------3--------0

1980----------1------1------0--------0

tabel(0,0) is leeg daarna volgen de verschillende categorieen op de eerste rij

alle personen die geboren zijn voor 1940 staan op de tweede rij
alle personen die geboren zijn voor 1950 staan op de derde rij
alle personen die geboren zijn voor 1960 staan op de vierde rij
alle personen die geboren zijn voor 1970 staan op de vijfde rij
alle personen die geboren zijn vanaf 1980 staan op de zesde rij

de periodes staan op de eerste kolom

Neem nu de vierde rij:

-----------S----W----J----P

<1960----9----5----4----3

de sommen zijn 9, 5 , 4 en 3

dat betekent dat van de personen die voor 1960 zijn geboren er 9 student zijn, er 5 werkloos zijn, er 4 een job hebben en 3 zijn met pensioen.

#10

Xenion

    Xenion


  • >1k berichten
  • 2606 berichten
  • Moderator

Geplaatst op 04 juni 2009 - 19:45

Ok ik zie het nu, dan moet je zoiets doen:

Voor element (i,j) dus: rij i, kolom j (alle2 beginnende vanaf 1)

resultaat = 0
For teller = 1 To max_in_array
	If arrPersonen(teller).jaar < 1930+i*10 Then
		If arrPersonen(teller).categorie = Functie_die_categorie_geeft_vanuit_nummer(j) Then
			resultaat = resultaat + 1
		End If
	End If
Next teller

Zoiets zou volgens mij moeten werken. Het is niet de meest efficiŽnte manier, maar volgens mij wel de makkelijkste.

Voor die laatste rij (vanaf 1980), moet je nog iets apart schrijven, maar dat is gelijkaardig.

Veranderd door Xenion, 04 juni 2009 - 19:47


#11

netwerker

    netwerker


  • 0 - 25 berichten
  • 5 berichten
  • Gebruiker

Geplaatst op 04 juni 2009 - 22:06

Ok ik zie het nu, dan moet je zoiets doen:

Voor element (i,j) dus: rij i, kolom j (alle2 beginnende vanaf 1)

resultaat = 0
For teller = 1 To max_in_array
	If arrPersonen(teller).jaar < 1930+i*10 Then
		If arrPersonen(teller).categorie = Functie_die_categorie_geeft_vanuit_nummer(j) Then
			resultaat = resultaat + 1
		End If
	End If
Next teller

Zoiets zou volgens mij moeten werken. Het is niet de meest efficiŽnte manier, maar volgens mij wel de makkelijkste.

Voor die laatste rij (vanaf 1980), moet je nog iets apart schrijven, maar dat is gelijkaardig.


bedankt ik zal het proberen





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures