Archief - [C#] probleempje ?

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Gprb_

Legacy Member
Iemand die mij verder kan helpen ?
Het is de bedoeling van in de ene void een getal in te lezen en via een andere void dat getal om te keren .
Ik zit momenteel al zo , redelijk dicht denk'k (?) , iemand met een idee ?
Bij het aangeduide gedeelte zit ik met een fout , iemand raad mee ?

Code:
private void GGD() {
      Console.Title = "Grootste gemene deler ";
      Console.Write("Geef een van nul verschillend getal in a.u.b. ...");
      
      int GGDGetal = int.Parse(Console.ReadLine());

   [B]Console.Write("De grootste gemene deler van {0} en zijn cijferomkering {1} is {2}", GGDGetal, [COLOR="Red"]CijferOmkering(GGDGetal))[/COLOR];[/B]
      
      
    }
    public void CijferOmkering(int GGDGetal) {
      GGDGetal = int.Parse(Console.ReadLine());

      int LaatsteCijfer;

      while (GGDGetal > 0) {
        LaatsteCijfer = GGDGetal % 10;
        Console.Write(LaatsteCijfer);
        GGDGetal = (GGDGetal - LaatsteCijfer) / 10;
      }

Bedankt !

forloRn_

Legacy Member
Omdat CijferOmkering(GGDGetal) een void is en die kun je nogal moeilijk weergeven. Je moet iets teruggeven uit die functie he vriend.

Gprb_

Legacy Member
forloRn_ zei:
Omdat CijferOmkering(GGDGetal) een void is en die kun je nogal moeilijk weergeven. Je moet iets teruggeven uit die functie he vriend.

Maak ik dan best een class aan voor die cijferomkering ? Want ik snap het niet helemaal :oink:

MAXXUR

Legacy Member
Volgens mij is het de bedoeling da ge als volgt tewerk gaat:
-declareer uw integer in main-scope
-geef dan een REFERENTIE door naar beide functies; in de ene leest ge de geheugenplaats voor die referentie in, in de tweede past ge de inhoud wat aan
-die aanpassingen zijn dan op main-scope evengoed "zichtbaar", en dan print ge ze maar uit

heel het doel van "void" functies te gebruiken volgens de opgave is immers dat ge gebruik maakt van referenties (pointers)!

Gprb_

Legacy Member
MAXXUR zei:
Volgens mij is het de bedoeling da ge als volgt tewerk gaat:
-declareer uw integer in main-scope
-geef dan een REFERENTIE door naar beide functies; in de ene leest ge de geheugenplaats voor die referentie in, in de tweede past ge de inhoud wat aan
-die aanpassingen zijn dan op main-scope evengoed "zichtbaar", en dan print ge ze maar uit

heel het doel van "void" functies te gebruiken volgens de opgave is immers dat ge gebruik maakt van referenties (pointers)!

uhu ,iemand die een voorbeeldje kan maken ?

MAXXUR

Legacy Member
Gprb_ zei:
uhu ,iemand die een voorbeeldje kan maken ?

Ik gaf u alle conceptuele ingrediënten om der zelf aan te beginnen. Het zijn exact zo'n dingen zelf uitzoeken en zelf tot inzicht komen wa u een goede programmeur gaat maken :) Ik heb in principe al teveel gezegd

Gprb_

Legacy Member
MAXXUR zei:
Ik gaf u alle conceptuele ingrediënten om der zelf aan te beginnen. Het zijn exact zo'n dingen zelf uitzoeken en zelf tot inzicht komen wa u een goede programmeur gaat maken :) Ik heb in principe al teveel gezegd

Geloof me , ik zoek al een eindje hoor . Nuja , ik vind het toch niet ..

Gprb_

Legacy Member
Ik dacht het wel zo ging lukken , door een aparte class te maken en dan te linken . Maar bij me menukeuze loopt het programma nog niet , nog even zoeken dan , maar volgens mij klopt het nu wel een beetje zeker ?
Er staat nog andere code boven hoor.
GGD Method
Code:
private void GGD() {
      Cijferomkering CO = new Cijferomkering();
      Console.Title = "Grootste gemene deler ";
      Console.Write("Geef een van nul verschillend getal in a.u.b. ...");
      
      int GGDGetal = int.Parse(Console.ReadLine());

      Console.Write("De grootste gemene deler van {0} en zijn cijferomkering {1} is {2}", GGDGetal,CO.CijferOmkering(GGDGetal));
      
      
    }

Cijferomkering class
Code:
namespace VbExamen {
  class Cijferomkering {
    public int CijferOmkering(int GGDGetal) {
      

      int LaatsteCijfer=0;

      while (GGDGetal > 0) {
        LaatsteCijfer = GGDGetal % 10;
        Console.Write(LaatsteCijfer);
        GGDGetal = (GGDGetal - LaatsteCijfer) / 10;
      }
      return LaatsteCijfer;
    }
  }
}


Maar krijg nu nog een Error 2 'CO' is a 'variable' but is used like a 'method' :doh:

tha_rippa1be

Legacy Member
Gprb_ zei:
Ik dacht het wel zo ging lukken , door een aparte class te maken en dan te linken .

Code:
private void GGD() {
      Cijferomkering CO = new Cijferomkering();
      Console.Title = "Grootste gemene deler ";
      Console.Write("Geef een van nul verschillend getal in a.u.b. ...");
      
      int GGDGetal = int.Parse(Console.ReadLine());

      Console.Write("De grootste gemene deler van {0} en zijn cijferomkering {1} is {2}", GGDGetal,CO(GGDGetal));
      
      
    }

Maar krijg nu nog een Error 2 'CO' is a 'variable' but is used like a 'method' :doh:
Een duidelijke error boodschap dan dat kunt ge niet krijgen he...

Dit is de lijn waar ge CO declareert en ineens ook een waarde aan toekent:
Cijferomkering CO = new Cijferomkering();

Wat is de inhoud van CO? wat type is dat?
Het type is "Cijferomkering", een Klasse. De inhoud van CO is een instantie van die klasse.

Klassen zelf kunnen niet uitgevoerd worden als een functie, maar ze hebben wel methoden die ge kunt uitvoeren.


Het lijkt mij precies alsof ge geen goed begin hebt gehad in programmeren, precies alsof er stukken ontbreken.
Bvb, die dingen dat ge omschrijft als voids.. dat zijn functies met als return type void (die returnen dus niets).
Dan instanties proberen te gebruiken als functies..
'T is precies alsof ge random wat aant rondspringen zijt in een boek.

Pak eens een programmeer boek en lees dat van begin tot einde zonder te veel sprongen te maken.

Gprb_

Legacy Member
tha_rippa1be zei:
Ik heb daar een duidelijke reden voor .
Ik ben afgestudeerd in informaticabeheer , met een leerkracht die we 12 à 15uur per week hadden. Zie je hem al komen ? Die leerkracht ziet ook liever eens iemand anders en ipv dat we zijn 'lievelingetjes' werden , zag hij ons liever niet.
Naar behoren van les geven , zat hij liever te surfen op het net en youtube filmpjes te bekijken. We 'programmeerden' in vb.net bijna altijd op ons zelf , want zelf kon hij er ook maar amper iets van.
Met momenten kon hij zelf geen openstaande programma's in de taakbalk vinden (!?)
Met als gevolg dat we maar van alles kleine beetjes gezien hebben , als het hem uitkwam gaf hij ons bv sorteren(50 min waarvan 10min echte uitleg , die dan nog op niets trok , de les daarna array's , dan weer sorteren en daarna begon hij over iets anders .
Nuja dit jaar in de hogeschool begonnen aan toegepaste informatica en ik probeer mee te geraken met de kleine beetjes die ik snap en ken van op forums of van in zijn 'lessen'. De lessen in de hogeschool begonnen redelijk snel voor sommige onder ons ( programmeren in c# ) en dat was al ietsje aanpassen want wij kwamen van vb.

Ik blijf zoeken en voort doen tot ik slaag in TI , want ik wil dat diploma ;)

Groeten

tha_rippa1be

Legacy Member
Daarom dat ik een boek aanraad, dan hebt ge een goede scructuur dat ge kunt volgen.

Tzijn echt basisdingen die ge nog niet helemaal kent.
Als ge zelfs de eerset paar hoofdstukken leest van een basis boek gaan er al veel van de antwoorden van deze therad duidelijker zijn.
Ik denk dan vooral aan de comment van forloRn_ en u vraag die daarop volgde.

Er kan u hier na veel uitleggen een oplossing gegeven worden op de vraag die ge had in u beginpost maar ik denk dat ge meer nut gaat hebben aan u basiskennis bij te vullen.


Ik ben u niet aant uitlachen of ik weet ni wat he, dit is echt het geen waarvan ik denk dat ge het meeste door geholpen gaat worden int algemeen, niet enkel voor deze specifieke vraag.

Dieterg

Legacy Member
Pffff, na een semester C# nog met zo'n vragen afkomen?

Probeer in een methode nooit iets te printen of iets dergelijke. Probeer te werken met een return statement.

Hoe ik het zou doen is een methode aanmaken bv:

Code:
private static int DraaiOm(int g)
{
    
}

In deze methode gaan we het getal omdraaien. Dit doen kan je doen door eerst het getal om te zetten naar een string. Als het in een string staat kun je makkelijk via substring de waarde omkeren via een for-loop.

Code:
string getalString = g.ToString();
string getalOmgedraaid ="";

for (int i = getalString.Length - 1; i >= 0; i--)
{
        getalOmgedraaid += getalString.Substring(i,1);
}

Het enige wat je nu nog moet doen is het omgedraaide getal returnen als een integer. Dit doe je dan weer door de string te casten naar een int.

Code:
return int.Parse(getalOmgedraaid);

In je main blok kan je nu die methode aanroepen en de returnwaarde in een integer stoppen..

Code:
int omgedraaidGetal = DraaiOm(getal);

Console.WriteLine("Getal {0} omgedraaid is: {1}", getal, omgedraaidGetal);
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan