Aantal letters in een zin berekenen

Status
Niet open voor verdere reacties.

malcolmx

Gebruiker
Lid geworden
21 feb 2014
Berichten
11
Hallo allemaal,

Ik vroeg me af hoe je in VBA kan berekenen hoevaak alle letters in een zin voorkomen die door de gebruiker is ingevoerd(in percentages).
Dus bijvoorbeeld stel iemand voert in: Ik ga naar huis. Dan komt de letter i : (1/12) = 0.083% keer voor en de letter a: (3/12)= 0.25% keer voor.
Verder mag ik alleen twee functies van de String gebruiken : Len(string) en Mid(string, start, lengte).
Ik dacht aan zoiets:

http://nl.tinypic.com/r/2q1fpfc/8

maar werkt helaas niet.. als iemand mij kan helpen, heel graag!
 
Deze code is van forumhelper @snb, maar aangepast naar jouw wensen.
Zet in cel A1 de tekst, en laat de code lopen.

Code:
Sub M_snb()
  Dim sp() As Byte, c01 As String, Ln As Long
 c01 = Replace(Range("A1"), " ", "")
  sp = UCase(c01)
  Ln = Len(c01)
  Cells(2, 9).Resize(26) = [index(char(row(65:91)),)]
  Cells(1, 10).Resize(27) = Application.Frequency(sp, [index(transpose(row(64:91)),)])
  [k2:k27] = Evaluate("=j2:j27/" & Ln & "")
End Sub
 
Ok:



Volgens mij is het niet in Office maar in Basic (VBA). Waarbij het niet gaat om percentages, maar om tekens.
 
Laatst bewerkt door een moderator:
Klopt, in de opdracht staat een tip dat gebruik kan worden gemaakt van: Asc("a") wordt 97 Asc("b") wordt 98 enz. De functie Chr doet het tegenovergestelde, dus maakt van elke cijfer een letter.. Chr("a") wordt dan 97 etc. Verder moet er gebruik worden gemaakt van een Inputbox, de gebruiker moet echt iets invoeren. De opdracht:

http://i61.tinypic.com/20rv1mq.png

De tip dat er gebruik kon worden gemaakt van Asc werd buiten de opdracht vermeld ;)
 
Laatst bewerkt door een moderator:
Ja een opdracht voor school idd, maar ik kom er echt niet uit..
 
Laatst bewerkt door een moderator:
Dan mogen we sowieso geen complete oplossingen geven, maar je alleen maar in de goede richting duwen. En aangezien ik in je opdrachtomschrijving toch echt lees dat je alleen maar de strings LEN en MID mag gebruiken, zou ik een Select Case gebruiken die elke letter telt en in een (matrix) variabele zet. Als je de hele string hebt doorlopen (For i = 1 to Len(strInput)) bijvoorbeeld laat je aan het eind een msgbox zien met het resultaat. De functie van snb is mooi, maar volgens mij geen schoollesstof :).
Overigens is 3/12 ofwel 0,25 ofwel 25%. 100% zeker is het niet 0,25% :)
 
Een van de redenen waarom je er niet uit komt is waarschijnlijk doordat je meteen in termen van programmeren probeert te denken. Zet eerst een rustig op een rij hoe je dit probleem bijv. op papier zou oplossen:

-Je hebt een tekst nodig
-Vervolgens ga je het alfabet langs en tel je de letters in de tekst die overeenkomen met de letter uit het alfabet. Er is ook nog een tweede optie. Je neemt steeds een letter uit de tekst en telt die bij de juiste letter uit het alfabet
-Bedenk hoe je een percentage berekent. Ohja. Dan heb ik dus ook nog het totaal aantal letters nodig. Bereken de percentages
-En natuurlijk. Presenteer het resultaat.

Deze stukjes kun je vervolgens wel gemakkelijk omzetten in programmeertaal. Lukt het niet dan moet je in een tweede, derde, vierde ronde de stapjes steeds verder uitsplitsen in kleindere delen.



En ik ben het overigens 101% met octafish eens.
 
Dan mogen we sowieso geen complete oplossingen geven, maar je alleen maar in de goede richting duwen. En aangezien ik in je opdrachtomschrijving toch echt lees dat je alleen maar de strings LEN en MID mag gebruiken, zou ik een Select Case gebruiken die elke letter telt en in een (matrix) variabele zet. Als je de hele string hebt doorlopen (For i = 1 to Len(strInput)) bijvoorbeeld laat je aan het eind een msgbox zien met het resultaat. De functie van snb is mooi, maar volgens mij geen schoollesstof :).
Overigens is 3/12 ofwel 0,25 ofwel 25%. 100% zeker is het niet 0,25% :)

Klopt haha, dankjewel. Ik ga het proberen ;)
 
Een van de redenen waarom je er niet uit komt is waarschijnlijk doordat je meteen in termen van programmeren probeert te denken. Zet eerst een rustig op een rij hoe je dit probleem bijv. op papier zou oplossen:

-Je hebt een tekst nodig
-Vervolgens ga je het alfabet langs en tel je de letters in de tekst die overeenkomen met de letter uit het alfabet. Er is ook nog een tweede optie. Je neemt steeds een letter uit de tekst en telt die bij de juiste letter uit het alfabet
-Bedenk hoe je een percentage berekent. Ohja. Dan heb ik dus ook nog het totaal aantal letters nodig. Bereken de percentages
-En natuurlijk. Presenteer het resultaat.

Deze stukjes kun je vervolgens wel gemakkelijk omzetten in programmeertaal. Lukt het niet dan moet je in een tweede, derde, vierde ronde de stapjes steeds verder uitsplitsen in kleindere delen.



En ik ben het overigens 101% met octafish eens.

Ja ik had wel een psd gemaakt.. maar ik ga het opnieuw proberen met jullie tips ^^ dank.
 
Ik dacht aan zoiets, en dan doorlopend tot z, gaat het de goeie richting op?

Code:
Sub Opdracht1()


Dim Invoer As String
Dim Lengte As Integer

Invoer = InputBox("Voer hier je tekst in")
For Lengte = 1 To Len(Invoer)

If Mid(Invoer, 1, Len(Invoer)) = "a" Then
Lengte = ((Asc("a") - 96) / Len(Invoer)) * 100
ElseIf Mid(Invoer, 1, Len(Invoer)) = "b" Then
Lengte = ((Asc("b") - 97) / Len(Invoer)) * 100
ElseIf Mid(Invoer, 1, Len(Invoer)) = "c" Then
Lengte = ((Asc("c") - 98) / Len(Invoer)) * 100

End If

Next Lengte

MsgBox (Lengte)

End Sub
 
Laatst bewerkt:
Zo moet je voor iedere letter een apart conditioneel statement maken, lijkt mij niet praktisch.

Maak gebruik van arrays, d.m.v. ASCII-codes danwel een door jou gemaakte array van alle letters uit het alfabet.

[edit]
Ik heb voor mezelf even een werkend algoritme gemaakt, het makkelijkst is om door een string met het alfabet (dim abc as string = "abcdef...xyz") te itereren, en van daaruit te kijken hoe vaak de letter voorkomt.[/edit]
 
Laatst bewerkt:
Waarom een Array van alle letters uit het alfabet ? Door gebruik te maken van Instr maak je een Array van alle unieke letters uit je Zoekstring. Dan moet je enkel door deze Array loopen ipv door alle 26 letters uit het alfabet.
Nog beter is gebruik te maken van een Dictionary, maar dat is waarschijnlijk te hoog gegrepen voor TS.
Trouwens de oplossing van HSV doet exact wat er gevraagd wordt, nietwaar. Strakke code en to the point.
 
Laatst bewerkt:
Voor een eerste programma in VBA vind ik dit een niet-voor-de-hand-liggende opdracht.

Voor welke opleiding is dit ?
 
Laatst bewerkt:
Bedrijfswiskunde, ik vind het ook belachelijk. Ik heb pas 2 theorie colleges gehad en moet dit nu al kunnen. Ik kom er gewoon niet uit, eerste keer dat ik met VBA werk, ik beheers de kennis er gewoon niet voor..
 
Laatst bewerkt door een moderator:
Svp niet quoten !

Heb je geen handboek dan ?

Mogen bij de berekening van een percentage spaties meegenomen worden of niet ?
 
Laatst bewerkt:
Ik heb wel een boek in het Engels.. maar dat is meer een naslagwerk, dus stel je ben vergeten hoe iets ook alweer zat dan staat het daarin. Maar echte opgavens om te oefenen, nee dat niet. En spaties mogen meegenomen worden ja, hoeft geen rekening mee worden gehouden.
 
Je bedoelt dat je er wél rekening moet houden, want de lengte van een tekst wordt met LEN berekend inclusief spaties. Dus dan klopt je berekening van geen kant. Dus je wilt het netto resultaat van de ingegeven tekst zonder spaties.
 
Het is maar hoe je het interpreteert, spaties mogen iniedergeval gewoon worden meegenomen. "Ik ga naar huis" krijgt dan een totaal van 15 posities ..
 
@malcolmx Verschillende berichten van je aangepast omdat je onnodig quote. Wanneer je direct reageert op een reactie is het niet nodig om dat bericht te quoten. Onnodig quoten heet dat, hetgeen niet gewenst is. Bovendien zijn huiswerkvragen niet toegestaan, mits je aangeeft wat je zelf allemaal gedaan heb om het probleem op te lossen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan