30 berichten aan het bekijken - 1 tot 30 (van in totaal 53)
  • Q:
    Bijdrager
    Elmo1608

    Programmeeropdracht 1

    De eerste opdracht dan maar. 8)
    Het is niet zo’n moeilijke opdracht en is meer bedoeld als een test voor de belangstelling hiervoor.

    Welke taal?
    Je mag elke taal gebruiken, mits deze ook door andere mensen op dit forum te gebruiken is. Als je een taal gebruikt die niet standaard op de mac staat gebruikt, geef dan even een link erbij naar de website waar je de compiler te downloaden is.

    De opdracht
    Rekeningnummers

    Om typefouten te verkomen, wordt er in Nederland de elfproef gedaan met rekeningnummers. Dit betekend dat de nummers in een rekeningnummer vermenigvuldigd worden met 9 terug naar 1 en als de som van die getallen gedeeld door 11 een geheel getal is, dan is het een geldig rekeningnummer.
    Bijvoorbeeld:

    Rekeningnummer: 12 34 56 789
    Som: 1*9 + 2*8 + 3*7 + 4*6 + 5*5 + 6*4 + 7*3 + 8*2 + 9*1 = 165

    165/11 is een geheel getal.

    12 34 56 789 is dus een geldig rekeningnummer.

    De opdracht luidt:

    Schrijf een programma die als invoer een rekening nummer krijgt en een rekeningnummer test of het een geldig of ongeldig nummer is.

    Bonusopdracht:

    Bedenk een manier om te berekenen hoeveel verschillende rekeningnummers gemaakt kunnen worden met negen cijfers, die voldoen aan de elfproef.

    Inleveren
    Stuur de opdracht per PB naar mij en op de uiterlijke inleverdatum zet ik ze in dit draadje.

    Enkele tips
    – Een goed uitgewerkt programma dan niet werkt is mooier om te zien dan een snelle ‘hack’ die het wel doet.
    – Gebruik genoeg comments in je code zodat het voor andere, en voor jezelf duidelijk is wat je code doet.
    – Het is geen wedstrijd! Er wordt geen prijs uitgereikt voor snelste of beste inzending!

    Inleverdatum
    Over 2 weken, dus woensdag 22 maart.

    Veel succes!

    Bijdrager
    apollo51

    Haha erg slim van je, je huiswerk van school posten als huiswerk voor het forum:P

    Bijdrager
    Elmo1608
    ”apollo51″

    Haha erg slim van je, je huiswerk van school posten als huiswerk voor het forum:P

    Ben daar maar niet bang voor. Doe niks in de informatica. Programmeren doe ik gewoon om af en toe de tijd door te komen.

    Bijdrager
    apollo51

    /*
    Opdracht: Rekeningnummers (Zonder extra opdracht)
    Programmeertaal: C++
    Compiler: Apple Xcode
    Naam: Thomas Wiggers
    Forum: apollo51
    */

    #include <iostream>
    #include <curses.h>
    #include <math.h>

    using namespace std;

    int main (int argc, char * const argv[]) {
    //Variabelen
    int totaal=0,i=0; //Totaal van de 11 proef, Teller
    float uitkomst=0.0;

    //Code
    cout << “Voer een 9 cijferig rekeningnummer in en druk op enter: “;

    //Pas de 11 proef toe
    for(i=9;i>0;i–){
    totaal=totaal+(getchar()-48)*i; //ASCII-48=getal
    }

    //Print het resultaat
    uitkomst=(float)totaal/11;

    cout << totaal << “/11=” << uitkomst << “n”;

    if(totaal/11==uitkomst){
    //Geheel getal
    cout << “Dit rekeningnummer klopt.n”;
    }else{
    //Geen geheel getal
    cout << “Dit rekeningnummer klopt NIET!n”;
    }

    return 0;
    }

    Bijdrager
    sypie

    Misschien is het handig om code ook tussen de [code:1:e999a495d6]Code tags[/code:1:e999a495d6] te plaatsen?

    Bijdrager
    SpaRood

    Leuke opdracht, maar ik doe het alleen voor een prijs. Misschien is het wat om een soort “Hall of Fame” voor dit subforum te maken?

    Bijdrager
    Elmo1608

    Ey apollo, bedankt voor je bijdrage.
    We zouden een hall of fame kunnen maken, maar dan heb je meteen een jury nodig enzo. Als bij deze opdracht genoeg interesse is, kunnen we misschien een hall of fame maken

    Bijdrager
    Marc29

    Op de commandline (1 regel):
    [code:1:f2f9c52dec]
    perl -e ‘for ($i=0; $i < 9; $i++) { $totaal = $totaal + substr(@ARGV[0],$i,1)*(9-$i);} $totaal%11==0 ? print "goed" : print "fout";’ 123456789
    [/code:1:f2f9c52dec]

    Zo onleesbaar is perl toch niet :P

    Bijdrager
    SpaRood
    ”Marc29″

    Op de commandline (1 regel):
    [code:1:ca02512d44]
    perl -e ‘for ($i=0; $i < 9; $i++) { $totaal = $totaal + substr(@ARGV[0],$i,1)*(9-$i);} $totaal%11==0 ? print "goed" : print "fout";’ 123456789
    [/code:1:ca02512d44]

    Zo onleesbaar is perl toch niet :P

    hahahaha :D :D :P

    Bijdrager
    Jakko Westerbeke

    Deze is in Python, en lijkt te werken:
    [code:1:06344f4abf]#! /usr/bin/env python

    # Importeren benodigde modules: string om te kijken of iets wel een getal is, sys om het rekeningnummer van de commandoregel op te kunnen halen
    import string, sys

    # Rekeningnummer initialiseren om latere variabele-fouten tegen te gaan
    rekeningNummer = ""

    # Controle of er wel een rekeningnummer opgegeven is; zo niet, geef dan waarschuwing
    try:
    rekeningNummer = sys.argv[1]
    except IndexError:
    print "Gebruik: " + sys.argv[0] + " rekeningnummer"

    # Als er wel een rekeningnummer is gaan we verder
    if rekeningNummer:

    # Huidig controlegetal is 9 en totaal = 0
    controleGetal = 9
    totaal = 0

    # Haal een voor een de getallen uit het nummer
    for getal in rekeningNummer:

    # Is het wel een getal?
    if getal in string.digits:

    # Vermenigvuldig het getal met het controlegetal en tel het op bij het totaal
    totaal = totaal + int(getal) * controleGetal

    # Trek 1 af van controlenummer
    controleGetal = controleGetal – 1

    # Kijk of het nummer geldig is door staartdeling te doen; rest moet 0 zijn
    if divmod(totaal, 11)[1] == 0:
    geldig = "geldig"
    else:
    geldig = "ongeldig"

    # Druk uitkomst af
    print rekeningNummer + " is een " + geldig + " rekeningnummer."[/code:1:06344f4abf]

    Bijdrager
    LoveBug356

    Die perl kan nog iets korter en mooier;-)
    [code:1:0dafb0407b] perl -e ‘for ($i=0; $i < 9; $i++) { $totaal += substr(@ARGV[0],$i,1)*(9-$i);} $totaal%11==0 ? print "goedn" : print "foutn";’ 123456789
    [/code:1:0dafb0407b]

      ”$totaal +=” gebruiken i.p.v. $totaal = $totaal + …
      “n” in je strings gebruiken zodat meteen naar de volgende lijn wordt gegaan.[/list:u:0dafb0407b]

      Het is mss fijn om elkaar tips te geven over het geschreven programma bij:
      Hoe kan iets sneller worden uitgevoerd, minder geheugen worden gebruikt,…
      (iedereen kan er maar van bijleren)

      Bijdrager
      Elmo1608

      Ey leuk, Perl. Hier zijn altijd van die korte oplossingen mogelijk.
      Jakko, leuk gedaan met python, wat me wel opvalt is de manier waarop je de banshee hebt gedefineerd. Goed gedocumenteerd ook.

      Ik had vanmiddag een tussenuur, dus hier is m’n bijdrage in C:
      [code:1:eb526eb6e1]
      /*
      * rekeningnummers.c
      *
      *
      */

      #include <stdio.h>

      int main (void) {

      int stop, count, multiplier, sum;
      int rekening_nummer[9];

      printf ("Geef een rekeningnummer en druk op [Enter]: ");
      count = 0;
      stop = 0;
      while (stop != 1) {
      rekening_nummer[count] = getchar();
      if (rekening_nummer[count] == ‘n’)
      stop = 1;
      if (count == 8)
      stop = 1;
      count++;
      }

      count = 0;
      multiplier = 9;
      sum = 0;
      while (count < 9) {
      sum = sum + ((rekening_nummer[count] – 48) * multiplier);
      count++;
      multiplier–;
      }
      printf("%i",sum);

      if (sum % 11 == 0)
      printf ("Geldig nummer!n");
      else
      printf ("Ongeldig nummer!n");
      }

      [/code:1:eb526eb6e1]

      Ik zie dat er nog geen oplossingen voor de bonusopdracht zijn… :o

      Inactief
      Anoniem

      Die bonusopdracht is gewoon een stukje combinatoriek. Ik heb het wel gehad, maar ben het redelijk kwijt hoe je het ook alweer op moest lossen… (wiskunde zakt erg snel weg:( )

      * boek erbij pakt

      [edit]
      Nah, ok, ik ben wiskundig gezien te incapabel geworden om dit nog uit te rekenen. Waarschijnlijk als iemand het hier neerzet dat ik denk ‘dúh’. Maar zo 1.2.3 uit mezelf niet:)

      Bijdrager
      LoveBug356

      Dat perl gedoe:
      [code:1:024594ed44]perl -e ‘for ($i=0; $i < 9; $i++) { $totaal += substr(@ARGV[0],$i,1)*(9-$i);} $totaal%11==0 ? print "goedn" : print "foutn";’ 123456789 [/code:1:024594ed44]
      heeft nog wel enkele nadelen.

      Door valgrind sturen geeft
      [code:1:024594ed44]==14320== LEAK SUMMARY:
      ==14320== definitely lost: 133542 bytes in 13 blocks.
      ==14320== indirectly lost: 109288 bytes in 602 blocks.
      ==14320== possibly lost: 0 bytes in 0 blocks.
      ==14320== still reachable: 0 bytes in 0 blocks.
      ==14320== suppressed: 0 bytes in 0 blocks.
      [/code:1:024594ed44]
      In een bank perl gebruiken is dus niet echt aan te raden, als je je Computer niet iedere dag wilt herstarten.

      Bijdrager
      Jakko Westerbeke
      ”Elmo1608″

      Jakko, leuk gedaan met python, wat me wel opvalt is de manier waarop je de banshee hebt gedefineerd. Goed gedocumenteerd ook.

      Hoe ik de wat gedefiniëerd heb? (“Banshee” is voor mij een RPG-monster …) O, en normaal staat er lang niet zoveel commentaar in scriptjes die ik schrijf — nu leek het me alleen wel handig:)

      Bijdrager
      Elmo1608

      dat [code:1:646ed7e364]#! /usr/bin/env python[/code:1:646ed7e364] is de banshee.
      Waarom is dat zo gedaan en niet gewoon
      [code:1:646ed7e364]#! /usr/bin/python[/code:1:646ed7e364]?

      Inactief
      Anoniem

      Ik dacht altijd dat [code:1:117d4aa051]#![/code:1:117d4aa051]
      shebang heette en niet banshee:?

      Bijdrager
      Elmo1608

      Oja:P

      Bijdrager
      Thijs Alkemade

      Mijn inbreng mbv AppleScript:

      [code:1:0ccc430253]
      display dialog "Voer het rekenignummer in:" default answer "0"
      — vraag de gebruiker om het getal

      set nummer to the text returned of the result as integer
      — het getal wordt in de variabele nummer gezet

      set total to 0
      — total is het resultaat van de elfproef

      set a to nummer
      — a wordt ook het nummer, maar wordt steeds verminderd

      set i to 1
      — i is een teller

      repeat while 10 ^ (i – 1) ≤ nummer
      set total to total + (a mod 10) * i
      — bij het totaal wordt a mod 10 (de rest van a bij deling door 10, dus het laatste getal) * i (i telt op, het werkt van achter naar voor, dus 1, 2, 3) opgeteld

      set a to (a div 10)
      — a wordt gedeeld door 10, en het deel achter de komma wordt weggehaald, zodat het in de volgende loop met het volgende getal begin

      set i to i + 1
      end repeat

      if ((total mod 11) = 0) then
      — mod geeft hier weer de rest bij deling door 11, als het nul is is het deelbaar door 11

      display dialog (nummer as string) & " is een geldig rekeningnummer, de elfproefwaarde is " & (total as string) & "."
      else
      display dialog (nummer as string) & " is geen geldig rekeningnummer, de elfproefwaarde is " & (total as string) & "."
      end if
      [/code:1:0ccc430253]

      Bijdrager
      Jakko Westerbeke
      ”Elmo1608″

      dat [code:1:600bdb273d]#! /usr/bin/env python[/code:1:600bdb273d] is de banshee.

      Weer wat geleerd:) (Ik ben nogal autodidact waar het op programmeren aankomt, dus de terminologie ontgaat me nog wel eens.)

      ”Elmo1608″

      Waarom is dat zo gedaan en niet gewoon
      [code:1:600bdb273d]#! /usr/bin/python[/code:1:600bdb273d]?

      Geen idee, eigenlijk. Ik heb het uit een oud scriptje gekopiëerd omdat ik altijd vergeet wat er precies moet staan; vermoedelijk heb ik het in dat andere script weer ergens anders vandaan, en zo blijft de “fout” doorgaan:)

      Inactief
      Anoniem
      ”Jakko

      Geen idee, eigenlijk. Ik heb het uit een oud scriptje gekopiëerd omdat ik altijd vergeet wat er precies moet staan; vermoedelijk heb ik het in dat andere script weer ergens anders vandaan, en zo blijft de “fout” doorgaan:)

      Het heet dus sh-bang (en niet shebang of banshee). Zie ook bijvoorbeeld hier.

      Bijdrager
      Elmo1608

      Weet iemand hier misschien het verschil tussen “/usr/bin/env python” en /usr/bin/python”?
      Ik gok dat env python betekend dat je het in een environment draait en bij de andere het direct naar python toe stuurt. Kan iemand hier duidelijkheid in brengen?

      Inactief
      Anoniem

      man env zal je vertellen wat je weten moet…

      Bijdrager
      Aaargh

      In Haskell
      [code:1:fd903d4623]
      import Char

      check :: [Char] -> Bool
      check x = ((total 9 (map digitToInt (filter isDigit x))) `mod` 11) == 0

      total :: Int -> [Int] -> Int
      total t (x:xs) = t*x + (total (t-1) (xs))
      total t [] = 0
      [/code:1:fd903d4623]

      Voorbeeld van gebruik:
      [code:1:fd903d4623]
      Main> check "12 34 56 789"
      True
      Main> check "12 34 56 781"
      False
      [/code:1:fd903d4623]
      Ik zal eens denken of ik ‘m nog korter kan krijgen.

      Bijdrager
      LoveBug356
      ”Aaargh!”

      In Haskell

      Nog nooit van gehoord, we leren weer iets bij.
      Maar het lijkt mij niet een taal dat ik meteen wil kennen. :?
      Of vergis ik mij?

      Bijdrager
      a la Mac
      ”Elmo1608″

      Inleveren
      Stuur de opdracht per PB naar mij en op de uiterlijke inleverdatum zet ik ze in dit draadje.

      Nee! Gewoon op het forum zetten, dan hebben we er ook wat aan:)

      Bijdrager
      Elmo1608
      ӈ
      ”Elmo1608″

      Inleveren
      Stuur de opdracht per PB naar mij en op de uiterlijke inleverdatum zet ik ze in dit draadje.

      Nee! Gewoon op het forum zetten, dan hebben we er ook wat aan:)

      Daar heb je gelijk in, maar als ik heb al geluiden gehoord dat mensen een wedstrijd ervan willen maken en dan kan dat niet.

      Bijdrager
      Elmo1608

      Haskell… nog nooit van gehoord. Ziet er wel erg krachtig uit:

      Quicksort in Haskell
      [code:1:7011a63c86]qsort [] = []
      qsort (x:xs) = qsort elts_lt_x ++ [x] ++ qsort elts_greq_x
      where
      elts_lt_x = [y | y <- xs, y < x]
      elts_greq_x = [y | y <- xs, y >= x]
      [/code:1:7011a63c86]
      Quicksort in C
      [code:1:7011a63c86]
      qsort( a, lo, hi ) int a[], hi, lo;
      {
      int h, l, p, t;

      if (lo < hi) {
      l = lo;
      h = hi;
      p = a[hi];

      do {
      while ((l < h) && (a[l] <= p))
      l = l+1;
      while ((h > l) && (a[h] >= p))
      h = h-1;
      if (l < h) {
      t = a[l];
      a[l] = a[h];
      a[h] = t;
      }
      } while (l < h);

      t = a[l];
      a[l] = a[hi];
      a[hi] = t;

      qsort( a, lo, l-1 );
      qsort( a, l+1, hi );
      }
      }
      [/code:1:7011a63c86]

      Bijdrager
      a la Mac

      En dan nu: programmeeropdracht 2!

      Maak een programma, liefst in (Objective-)C, dat alle priemgetallen tussen 1 en 1000 zoekt.

      Bijdrager
      LoveBug356
      ӈ

      En dan nu: programmeeropdracht 2!
      Maak een programma, liefst in (Objective-)C, dat alle priemgetallen tussen 1 en 1000 zoekt.

      Ik zou het zo houden dat iedereen zijn taal kiest, vindt het wel prettig om eens andere talen te zien passeren.

      Ik denk dat je voor een nieuwe opdracht best een nieuw Topic opent.

      Opmerking op je voorstel: Priemgetallen zoeken staat in iedere cursus.(Wordt een copy-paste gedoe) Het lijkt me niet oportuun om zoiets te vragen. Kzou graag iets met meer pit zien;-)

    30 berichten aan het bekijken - 1 tot 30 (van in totaal 53)

    Je moet ingelogd zijn om een reactie op dit onderwerp te kunnen geven.