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

    Programmeeropdracht 2 – Koninginnen

    De opdracht
    De opdracht is simpel:
    Hoeveel koninginnen kunnen op een schaakbord staan zonder dat de elkaar kunnen slaan?
    Er zit ergens wel een addertje onder het gras maar die moeten jullie zelf zien te vinden.

    De uitwerking in dit draadje plaatsen. Het mag in elke taal die je wilt gebruiken, zolang het mogelijk is om te compileren/interpreten op de mac. Copy/Paste a.u.b. geen standaard-voorbeelden van internet, want daar leert niemand wat van en houd je bovendien jezelf voor de gek.

    Bonus
    Onderzoek hoe het aantal koninginnen mogelijk op 1 bord veranderd, als je de afmetingen van het bord variabel maakt. Is hier een verband tussen, of is dit volstrekte willekeur?

    Bijdrager
    a la Mac

    Nog even bij vermelden voor de leken dat een schaakbord 64 (8*8) velden groot is en dat een koningin in België (?) een dame heet en dat een dame horizontaal, vericaal en diagonaal alle velden kan bestrijden…

    Zozo…

    Bijdrager
    mgmheck
    ӈ

    Nog even bij vermelden voor de leken dat een schaakbord 64 (8*8) velden groot is en dat een koningin in België (?) een dame heet en dat een dame horizontaal, vericaal en diagonaal alle velden kan bestrijden…

    Zozo…

    Goede toevoeging :?

    Bijdrager
    Thijs Alkemade
    ”Elmo1608″

    Hoeveel koninginnen kunnen op een schaakbord staan zonder dat de elkaar kunnen slaan?

    Is het de bedoeling dat het programma alleen het maximale aantal zoekt? Of alle oplossingen met dat aantal?

    Inactief
    Anoniem

    Me dunkt dat ‘het’ maximale aantal afdoende is. Maar als je dan toch bezig bent :) kun je er net zo goed even een bordje bij uitprinten

    Het probleem is overigens leuker, en wellicht voor velen, simpeler als je het met enkel torens doet..

    Bijdrager
    a la Mac
    ”mgmheck”
    ӈ

    Nog even bij vermelden voor de leken dat een schaakbord 64 (8*8) velden groot is en dat een koningin in België (?) een dame heet en dat een dame horizontaal, vericaal en diagonaal alle velden kan bestrijden…

    Zozo…

    Goede toevoeging :?

    :?

    Inactief
    Anoniem

    Ik heb het maar even geimplementeerd in C.

    Een basisoplossing. Aan de output is te zien dat het een gespiegeld geheel is. (diagonaal gespiegeld) Ik denk dat het tevens de meest optimale oplossing is, daar je de oplossing wel op alle manieren kunt roteren en verschuiven, maar de uitkomst hetzelfde blijft.

    [edit]
    Ik zie net dat ik een diagonaal vergeten ben.. mag geen naam hebben dunkt me, het concept blijft hetzelfde. ik zal het even aanpassen en dan hier doorvoeren
    [/edit]

    [edit 2]
    Zo, fixed… Geen idee of de uitkomst (5) eigenlijk goed is of niet. ik voel me niet geroepen het na te rekenen;)
    [/edit 2]

    [edit 3]
    Voor de smartasses onder ons, ja het kan veel korter en efficienter, maar zo krijg je een mooie output, en heb je toch overzichtelijke code voor de wat meer newbies:)
    [/edit 3]

    [code:1:0133a3fda6]
    #include <stdio.h>
    #include <strings.h>

    enum {
    putQueenFailed = 0,
    putQueenOk = 1
    };

    #define MIN(a,b) (a) < (b) ? (a) : (b)
    #define dim 8
    static char board[dim][dim];

    const char kQueenSymbol = ‘Q’;
    const char kBlockedSymbol = ‘B’;
    const char kEmptySymbol = ‘ ‘;

    void clearBoard(char myBoard[dim][dim]);
    int putQueen(char myBoard[dim][dim]);
    void printBoard(char myBoard[dim][dim]);
    void blockBoardFromPosition(char myBoard[dim][dim], int x, int y);

    void header();
    void divider();

    int main(int argc, char *argv[]) {
    clearBoard(board);

    putQueen(board);

    printBoard(board);

    return 0;
    }

    void clearBoard(char myBoard[dim][dim]) {
    for( int x = 0; x < dim; x++ ) {
    for( int y = 0; y < dim; y++ ) {
    myBoard[y][x] = kEmptySymbol;
    }
    }
    }

    int putQueen(char myBoard[dim][dim]) {
    int dontStop = 1;
    int x = 0;
    int y = 0;

    while( x < dim && dontStop ) {
    y=0;
    while( y < dim && dontStop ) {
    y+= dontStop = myBoard[x][y] != kEmptySymbol;
    }

    if( dontStop ) {
    x++;
    }
    }

    if( !dontStop ) {
    printf("Putting a Queen at: %c%dn", ‘A’+x, y+1);
    blockBoardFromPosition(myBoard, x, y);
    myBoard[x][y] = kQueenSymbol;

    putQueen(myBoard);
    return putQueenOk;
    }

    return putQueenFailed;
    }

    void printBoard(char myBoard[dim][dim]) {
    header();

    for( int x = 0; x < dim; x++ ) {
    divider();

    printf("%d |", x+1);
    for( int y = 0; y < dim; y++ ) {
    printf(" %c |", myBoard[y][x]);
    }
    printf("n");
    }

    divider();
    printf("nn");
    }

    void blockBoardFromPosition(char myBoard[dim][dim], int x, int y) {
    for(int z = 0; z < dim; z++) {
    myBoard[x][z] = kBlockedSymbol;
    myBoard[z][y] = kBlockedSymbol;
    if( x+z < dim && y+z < dim ) {
    myBoard[x+z][y+z] = kBlockedSymbol;
    }

    if( x-z >= 0 && y-z >= 0 ) {
    myBoard[x-z][y-z] = kBlockedSymbol;
    }

    if( x-z >= 0 && y+z < dim ) {
    myBoard[x-z][y+z] = kBlockedSymbol;
    }

    if( x+z < dim && y-z >= 0 ) {
    myBoard[x+z][y-z] = kBlockedSymbol;
    }
    }
    }

    void header() {
    printf(" ");
    for( char p=’A’; p < ‘A’+dim ; p++ ) {
    printf(" %c ", p);
    }
    printf("n");
    }

    void divider() {
    printf(" ");
    for( int z = 0; z < dim; z++ ) {
    printf("+—");
    }
    printf("+n");
    }
    [/code:1:0133a3fda6]

    Bijdrager
    a la Mac
    ”Reflex”

    [edit]
    Ik zie net dat ik een diagonaal vergeten ben.. mag geen naam hebben dunkt me, het concept blijft hetzelfde. ik zal het even aanpassen en dan hier doorvoeren
    [/edit]

    Programmeeropdracht 3 – Torens 8)

    Dat programma was veel schrijfwerk zeg:|

    Bijdrager

    wat een hoop huiswerk heb je van je school:P

    Bijdrager
    a la Mac

    @ Reflex

    Sorry voor het verstoren van de feestvreugde… Maar GCC hier in de Terminal geeft een paar errors:

    [code:1:af8ebd0047]schaak.c: In function ‘clearBoard’:
    schaak.c:36: error: ‘for’ loop initial declaration used outside C99 mode
    schaak.c:37: error: ‘for’ loop initial declaration used outside C99 mode
    schaak.c: In function ‘printBoard’:
    schaak.c:74: error: ‘for’ loop initial declaration used outside C99 mode
    schaak.c:78: error: ‘for’ loop initial declaration used outside C99 mode
    schaak.c: In function ‘blockBoardFromPosition’:
    schaak.c:89: error: ‘for’ loop initial declaration used outside C99 mode
    schaak.c: In function ‘header’:
    schaak.c:112: error: ‘for’ loop initial declaration used outside C99 mode
    schaak.c: In function ‘divider’:
    schaak.c:120: error: ‘for’ loop initial declaration used outside C99 mode[/code:1:af8ebd0047]

    Of ligt dat aan mij?

    Inactief
    Anoniem
    ӈ

    @ Reflex

    Sorry voor het verstoren van de feestvreugde… Maar GCC hier in de Terminal geeft een paar errors:

    [code:1:d8fe922dea]schaak.c: In function ‘clearBoard’:
    schaak.c:36: error: ‘for’ loop initial declaration used outside C99 mode
    schaak.c:37: error: ‘for’ loop initial declaration used outside C99 mode
    schaak.c: In function ‘printBoard’:
    schaak.c:74: error: ‘for’ loop initial declaration used outside C99 mode
    schaak.c:78: error: ‘for’ loop initial declaration used outside C99 mode
    schaak.c: In function ‘blockBoardFromPosition’:
    schaak.c:89: error: ‘for’ loop initial declaration used outside C99 mode
    schaak.c: In function ‘header’:
    schaak.c:112: error: ‘for’ loop initial declaration used outside C99 mode
    schaak.c: In function ‘divider’:
    schaak.c:120: error: ‘for’ loop initial declaration used outside C99 mode[/code:1:d8fe922dea]

    Of ligt dat aan mij?

    Je moet zoals de errors al aangeven de C99 mode gebruiken;)

    [code:1:d8fe922dea]
    gcc queens.c -std=c99 -o queens
    [/code:1:d8fe922dea]

    Bijdrager
    a la Mac
    ”Reflex”
    ӈ

    @ Reflex

    Sorry voor het verstoren van de feestvreugde… Maar GCC hier in de Terminal geeft een paar errors:

    [code:1:71c3fef16b]schaar treed in werking[/code:1:71c3fef16b]

    Of ligt dat aan mij?

    Je moet zoals de errors al aangeven de C99 mode gebruiken;)

    [code:1:71c3fef16b]
    gcc queens.c -std=c99 -o queens
    [/code:1:71c3fef16b]

    Zo’n freak ben ik ook weer niet;)

    Leuk om te weten dat die foutmeldingen ook iets zinvols kunnen zeggen:)

    Voor wat dient die C99-mode?

    Bijdrager
    LoveBug356
    ”Reflex”

    Ik heb het maar even geimplementeerd in C.

    Een basisoplossing. Aan de output is te zien dat het een gespiegeld geheel is. (diagonaal gespiegeld) Ik denk dat het tevens de meest optimale oplossing is, daar je de oplossing wel op alle manieren kunt roteren en verschuiven, maar de uitkomst hetzelfde blijft.

    Mooi, maar niet juist. Uit jouw programma komt de oplossing dat er maar 5 kunnen staan.

    Nogthans is dit (onder andere) een goede oplossing:
    [code:1:022489fad7] A B C D E F G H
    +—+—+—+—+—+—+—+—+
    1 | Q | | | | | | | |
    +—+—+—+—+—+—+—+—+
    2 | | | | | Q | | | |
    +—+—+—+—+—+—+—+—+
    3 | | | | | | | | Q |
    +—+—+—+—+—+—+—+—+
    4 | | | | | | Q | | |
    +—+—+—+—+—+—+—+—+
    5 | | | Q | | | | | |
    +—+—+—+—+—+—+—+—+
    6 | | | | | | | Q | |
    +—+—+—+—+—+—+—+—+
    7 | | Q | | | | | | |
    +—+—+—+—+—+—+—+—+
    8 | | | | Q | | | | |
    +—+—+—+—+—+—+—+—+
    Het aantal konigingen is 8[/code:1:022489fad7]

    Dit bekom je door deze code (in c# mono):
    [code:1:022489fad7]using System;
    using System.Collections;

    class queen {
    public int x;
    public int y;
    public queen (int x, int y) {
    this.x = x;
    this.y = y;
    }
    public bool getPositieBezet(int x,int y){
    if (x == this.x) return true;
    if (y == this.y) return true;
    if (y-this.y == x-this.x) return true;
    if (y-this.y == -(x-this.x)) return true;
    return false;
    }
    public bool staathier(int x,int y){
    if (y==this.y && x == this.x) return true;
    return false;
    }
    }
    class Schaakbord {
    int dim;
    public ArrayList Konigingen;
    public Schaakbord(int aantal)
    {
    Konigingen = new ArrayList();
    dim = aantal;
    }

    public int getAantal(){ return Konigingen.Count;}

    public bool plaatsNieuweKoniging(int x, int y){
    foreach(queen q in Konigingen)
    if (q.getPositieBezet(x,y)) return false;
    Konigingen.Add(new queen(x,y));
    return true;
    }

    public void verwijderKoniging(int x, int y){
    foreach(queen q in Konigingen)
    if (q.staathier(x,y))
    {
    Konigingen.Remove(q);
    return;
    }
    }

    public void zetOpScherm()
    {
    Console.Write(" ");
    for( char p=’A’; p < ‘A’+dim ; p++ )
    Console.Write(" {0} ", p);
    Console.WriteLine("");
    tussenlijn();
    for (int i=0 ; i < dim ; i++){
    if (dim > 9 && i < 9) Console.Write(" ");
    Console.Write(" {0} |",i+1);
    for (int j = 0 ; j < dim; j++)
    {
    if (hierstaateenqueen(i,j))
    Console.Write(" Q |");
    else
    Console.Write(" |");
    }
    Console.WriteLine("");
    tussenlijn();
    }
    Console.WriteLine("Het aantal konigingen is {0}",Konigingen.Count);
    }
    private bool hierstaateenqueen(int x, int y)
    {
    foreach(queen q in Konigingen)
    if (q.staathier(x,y)) return true;
    return false;
    }
    private void tussenlijn(){
    Console.Write(" ");
    if (dim > 9 ) Console.Write(" ");
    for (int i = 0 ; i < dim ; i ++){
    Console.Write("+—");
    }
    Console.WriteLine("+");
    }
    }
    class Bereken{
    Schaakbord bestebord;
    int aantal;
    int grootste;

    Bereken(int aantal)
    {
    this.grootste = 0;
    this.aantal = aantal;
    bestebord = new Schaakbord(aantal);
    maakBord(bestebord);
    }

    private void maakBord(Schaakbord sBord)
    {
    for (int i = 0; i < aantal; i++)
    {
    for (int j = 0; j < aantal; j++)
    {
    if (sBord.plaatsNieuweKoniging(i,j))
    {
    maakBord(sBord);
    sBord.verwijderKoniging(i,j);
    }
    }
    }
    if (sBord.getAantal() > grootste)
    {
    sBord.zetOpScherm();
    grootste = sBord.getAantal();
    }
    }

    public static void Main(String[] args){
    new Bereken(Convert.ToInt32(args[0]));
    }
    }
    [/code:1:022489fad7]

    Inactief
    Anoniem

    Wat ook direct mijn 2 punten bewijst;)

    – Java is een crappy onleesbare taal
    – Nederlanse methodenamen zijn echt ‘whack’;)

    [edit]
    Voor hen die slim denken te zijn, ja, er staat C#, maar C# gebruikt voor een groot deel (zo niet geheel) de syntax van Java.

    [edit2]
    Okay, laten we dit niet doen na n-bier…

    Bijdrager
    rtfm
    ӈ
    ”Reflex”
    ӈ

    @ Reflex

    Sorry voor het verstoren van de feestvreugde… Maar GCC hier in de Terminal geeft een paar errors:

    [code:1:2050bb5e90]schaar treed in werking[/code:1:2050bb5e90]

    Of ligt dat aan mij?

    Je moet zoals de errors al aangeven de C99 mode gebruiken;)

    [code:1:2050bb5e90]
    gcc queens.c -std=c99 -o queens
    [/code:1:2050bb5e90]

    Zo’n freak ben ik ook weer niet;)

    Leuk om te weten dat die foutmeldingen ook iets zinvols kunnen zeggen:)

    Voor wat dient die C99-mode?

    Het lijkt er een beetje op dat à la Mac het heel erg stoer vind om mee te doen, hij mist alleen compleet de kennis om er ook maar iets aan toe te voegen.

    à la Mac, wat zou je er van vinden om misschien zo’n topic gewoon te lezen en niet proberen er wat aan toe te voegen tenzij je gewoon echt een oplossing kan coden ?

    Bijdrager
    a la Mac
    ”rtfm”
    ӈ
    ”Reflex”
    ӈ

    @ Reflex

    Sorry voor het verstoren van de feestvreugde… Maar GCC hier in de Terminal geeft een paar errors:

    [code:1:913c84aef3]schaar treed in werking[/code:1:913c84aef3]

    Of ligt dat aan mij?

    Je moet zoals de errors al aangeven de C99 mode gebruiken;)

    [code:1:913c84aef3]
    gcc queens.c -std=c99 -o queens
    [/code:1:913c84aef3]

    Zo’n freak ben ik ook weer niet;)

    Leuk om te weten dat die foutmeldingen ook iets zinvols kunnen zeggen:)

    Voor wat dient die C99-mode?

    Het lijkt er een beetje op dat à la Mac het heel erg stoer vind om mee te doen, hij mist alleen compleet de kennis om er ook maar iets aan toe te voegen.

    à la Mac, wat zou je er van vinden om misschien zo’n topic gewoon te lezen en niet proberen er wat aan toe te voegen tenzij je gewoon echt een oplossing kan coden ?

    Ik vroeg gewoon maar wat de C99-modus is… En jij geeft daar niet echt antwoord op:|

    Inactief
    Anoniem

    Kom op, als je niet begrijpt dat die warnings cq. errors misschien wel eens een hint van de compiler kan zijn waarom iets niet werkt (of werken zal) heb je het nog duidelijk niet begrepen:)

    Wat RTFM verder voorstelt is dat je STFU tenzij je iets nuttigs te melden hebt;)

    Maar waar blijft de rest van de inzendingen, mensen? Ik zal zo wel eens kijken of ik mijne nog juist geimplementeerd krijg…

    Bijdrager
    rvamerongen

    Leuk vraagstuk en oplossingen.

    Misschien zou het juist leuk zijn voor de beginnende codeerders dat er meer commentaar tussen de code aanwezig is i.p.v :wink: er buiten.
    Normaal als men code aflever geeft men ook aan hoe deze moet worden gecompileerd e.t.c
    Meestal boven de code. Misschien iets voor de komende oplossingen.:-)

    Inactief
    Anoniem

    Hier dan de juiste implementatie:) Had hem vannacht met mn lamme kop bijna goed, op een x++ na;)

    Compile instructions:
    gcc queens.c -std=c99 -o queens
    run instructions:
    ./queens

    Code:
    [code:1:1a350f31c5]#include <stdio.h>
    #include <strings.h>

    enum {
    putQueenFailed = 0,
    putQueenOk = 1
    };

    #define dim 8
    static char board[dim][dim];
    static char bestBoard[dim][dim];

    const char kQueenSymbol = ‘Q’;
    const char kBlockedSymbol = ‘ ‘;
    const char kEmptySymbol = ‘E’;

    int boardCount = 0;

    void clearBoard(char myBoard[dim][dim]);
    int putQueen(char myBoard[dim][dim]);
    void printBoard(char myBoard[dim][dim]);
    void blockBoardFromPosition(char myBoard[dim][dim], int x, int y);
    void copyBoard(char dst[dim][dim], char src[dim][dim]);
    int queensOnBoard(char aBoard[dim][dim]);

    void header();
    void divider();

    int main(int argc, char *argv[]) {
    clearBoard(board);
    clearBoard(bestBoard);

    putQueen(board);

    printBoard(bestBoard);
    printf("Queens: %dn", queensOnBoard(bestBoard));
    printf("Evaluated %d different boardsn", boardCount);

    return 0;
    }

    void clearBoard(char myBoard[dim][dim]) {
    for( int x = 0; x < dim; x++ ) {
    for( int y = 0; y < dim; y++ ) {
    myBoard[y][x] = kEmptySymbol;
    }
    }
    }

    int putQueen(char myBoard[dim][dim]) {
    int dontStop = 1;
    int x = 0;
    int y = 0;
    char copy[dim][dim];

    clearBoard(copy);

    while( x < dim ) {
    dontStop = 1;

    copyBoard(copy, myBoard);

    while( x < dim && dontStop ) {
    while( y < dim && dontStop ) {
    y+= dontStop = copy[x][y] != kEmptySymbol;
    }

    if( y >= dim ) {
    y = 0;
    }

    if( dontStop ) {
    x++;
    }
    }

    if( !dontStop ) {
    boardCount++;
    blockBoardFromPosition(copy, x, y);
    copy[x][y] = kQueenSymbol;

    int p = putQueen(copy);

    if( queensOnBoard(copy) > queensOnBoard(bestBoard) ) {
    copyBoard(bestBoard, copy);
    }

    }

    x++;
    }

    return putQueenOk;
    }

    void printBoard(char myBoard[dim][dim]) {
    header();

    for( int x = 0; x < dim; x++ ) {
    divider();

    printf("%d |", x+1);
    for( int y = 0; y < dim; y++ ) {
    printf(" %c |", myBoard[y][x]);
    }
    printf("n");
    }

    divider();
    printf("nn");
    }

    void blockBoardFromPosition(char myBoard[dim][dim], int x, int y) {
    for(int z = 0; z < dim; z++) {
    myBoard[x][z] = kBlockedSymbol;
    myBoard[z][y] = kBlockedSymbol;
    if( x+z < dim && y+z < dim ) {
    myBoard[x+z][y+z] = kBlockedSymbol;
    }

    if( x-z >= 0 && y-z >= 0 ) {
    myBoard[x-z][y-z] = kBlockedSymbol;
    }

    if( x-z >= 0 && y+z < dim ) {
    myBoard[x-z][y+z] = kBlockedSymbol;
    }

    if( x+z < dim && y-z >= 0 ) {
    myBoard[x+z][y-z] = kBlockedSymbol;
    }
    }
    }

    void copyBoard(char dst[dim][dim], char src[dim][dim]) {
    for(int x=0; x<dim; x++) {
    for(int y=0; y<dim; y++) {
    dst[x][y] = src[x][y];
    }
    }
    }

    int queensOnBoard(char aBoard[dim][dim]) {
    int queens = 0;

    for(int x=0; x<dim; x++) {
    for(int y=0; y<dim; y++) {
    queens += aBoard[x][y] == kQueenSymbol;
    }
    }

    return queens;
    }

    void header() {
    printf(" ");
    for( char p=’A’; p < ‘A’+dim ; p++ ) {
    printf(" %c ", p);
    }
    printf("n");
    }

    void divider() {
    printf(" ");
    for( int z = 0; z < dim; z++ ) {
    printf("+—");
    }
    printf("+n");
    }
    [/code:1:1a350f31c5]

    Sample Output:
    [code:1:1a350f31c5]
    A B C D E F G H
    +—+—+—+—+—+—+—+—+
    1 | Q | | | | | | | |
    +—+—+—+—+—+—+—+—+
    2 | | | | | | | Q | |
    +—+—+—+—+—+—+—+—+
    3 | | | | | Q | | | |
    +—+—+—+—+—+—+—+—+
    4 | | | | | | | | Q |
    +—+—+—+—+—+—+—+—+
    5 | | Q | | | | | | |
    +—+—+—+—+—+—+—+—+
    6 | | | | Q | | | | |
    +—+—+—+—+—+—+—+—+
    7 | | | | | | Q | | |
    +—+—+—+—+—+—+—+—+
    8 | | | Q | | | | | |
    +—+—+—+—+—+—+—+—+

    Queens: 8
    Evaluated 35204 different boards
    [/code:1:1a350f31c5]

    [edit]
    Het lijkt erop dat op een bord van dimensie n er n koninginnen passen.. Grappig:)

    [edit2]
    Voor de mensen die met de dimensie van het bord willen spelen, je hoeft enkel de definitie van dim aan te passen.
    Maak je bord niet te groot, de complexiteit van dit probleem is ongeveer n^2, dus voor 1 extra vakje kwadrateert de executietijd, zo ongeveer:)

    Bijdrager
    Thijs Alkemade
    ”Reflex”

    Het lijkt erop dat op een bord van dimensie n er n koninginnen passen.. Grappig:)

    Probeer eens 2 bij 2 :wink:

    Mijn probeersel, in c:

    [code:1:dc03ab4748]
    // pas dit aan voor een groter veld
    #define GROOTTE 8

    int veld[GROOTTE][GROOTTE];

    void vulVeld (int x, int y) {
    if(x < GROOTTE && x > -1 && y < GROOTTE && y > -1)
    veld[x][y] = 1;
    }

    void plaats (int x, int y) {

    int i;
    for(i=0;i<GROOTTE;i++) {
    vulVeld(x,i);
    vulVeld(i,y);
    vulVeld(x+i,y+i);
    vulVeld(x-i,y-i);
    vulVeld(x-i,y+i);
    vulVeld(x+i,y-i);
    }
    veld[x][y] = 8;
    }

    void printVeld() {
    int i,j;
    for(j=0;j<GROOTTE;j++)
    printf("+—");
    printf("+n");
    for(i=0;i<GROOTTE;i++) {
    printf("| ");
    for(j=0;j<GROOTTE;j++) {
    if(veld[i][j] == 8) printf("K | ");
    else printf(" | ");
    }
    printf("n");
    for(j=0;j<GROOTTE;j++)
    printf("+—");
    printf("+n");
    }
    printf("n");
    }

    int main() {
    int i,j,stuk,k,l, opl=0, totopl=0;
    for(k=0;k<GROOTTE;k++) {
    for(l=0;l<GROOTTE;l++) {
    for(i=0;i<GROOTTE;i++)
    for(j=0;j<GROOTTE;j++)
    veld[i][j] = 0;
    plaats(k,l);
    stuk = 1;
    for(i=0;i<GROOTTE;i++)
    for(j=0;j<GROOTTE;j++)
    if(veld[i][j] == 0) {
    plaats(i,j);
    stuk++;
    }
    printf("%d stukken geplaatstn", stuk);
    totopl++;
    if(stuk >= GROOTTE) {
    printVeld();
    opl++;
    printf("Beginpositie: %d, %dn", k,l);
    }
    }
    }
    printf("Aantal gevonden oplossingen met (minimaal) %d stukken: %d van de %dn", GROOTTE, opl, totopl);
    return 1;
    }
    [/code:1:dc03ab4748]

    Het werkt zo:
    – zet ergens een koningin neer
    – streep alle velden weg die gedekt worden
    – begin bij (0,0) en ga alle punten langs, als een punt niet gedekt is, zet er een koningin neer
    – streep weer alle gedekte velden weg en plaats de volgende koningin, enz

    Hij analyseert dus niet alle oplossingen, maar voor 8 bij 8 vindt ie wel een oplossing met 8 koninginnen.

    Bijdrager
    rtfm
    ӈ

    En jij geeft daar niet echt antwoord op:|

    Er is een spreekwoord: Praten is zilver, zwijgen is goud;) Misschien is deze wel een beetje van toepassing nu.

    Ik bedoel er mee te zeggen, als het het interessant vind, lees het topic dan vervuil het niet met onzinnige nutteloze vragen.

    Inactief
    Anoniem

    No pun intended, Thijs, maar ik vind het niet geweldig leesbaar;)

    Tips van mijn part:
    – Witruimte (spaties, enters, tabs) zijn GRATIS! Gebruik het
    – if-statements zonder brackets zijn welliswaar valide, maar dat maakt het er niet duidelijker op, en zorgt voor lastige bug-zoek momenten

    Bijdrager
    Elmo1608

    [code:1:79791e9672]return 0[/code:1:79791e9672]Betekend toch succes? Of ben ik nu aan het ijlen…

    Bijdrager
    LoveBug356
    ”Reflex”

    Wat ook direct mijn 2 punten bewijst;)
    – Java is een crappy onleesbare taal
    – Nederlanse methodenamen zijn echt ‘whack’;)

    Moeilijk te lezen,… voor iemand dat kan programmeren kan dit geen probleem zijn.

    Engelse namen gebruiken veranderd de functionaliteit van het programma niet. Ik hoef niet bij een of andere elite groep te horen dus ik gebruik gewoon iets wat in mij opkomt. Als je het anders wilt moet je maar refactoren.

    Voor opmaak bestaan er genoeg tools, daar moet een programmeur zich niet mee bezighouden. Als je dat door zo een programma draaien ziet het er net hetzelfde uit als iedere andere taal.

    Zeg ervan wat je wilt maar mijn versie was JUIST en jouw eerste versie was FOUT. Dus als je algoritme fout is dan mag je eender welke taal gebruiken en je methodes in eender welke taal zetten je uitkomst blijft gewoon fout. Dus ik zou je aanraden ipv de slimmerik uit te hangen beter twee keer na te denken voordat je kritiek geeft op een ander. :sealed:

    Inactief
    Anoniem
    ”LoveBug356″
    ”Reflex”

    Wat ook direct mijn 2 punten bewijst;)
    – Java is een crappy onleesbare taal
    – Nederlanse methodenamen zijn echt ‘whack’;)

    Moeilijk te lezen,… voor iemand dat kan programmeren kan dit geen probleem zijn.

    Dan kun je alles net zo goed op een regel zetten. De code is voor iemand die de taal meester is zo leesbaar als zijn opmaak. Ik vind persoonlijk deze opmaak onder de maat. Daarnaast natuurlijk, is dit een topic voor mensen die veelal nog niet kunnen programmeren, dus een duidelijkere structuur kan geen kwaad… Je weet zelf ook wel dat dit niet netjes vormgegeven is.
    Nagnoeg ieder groot project (Adium, Growl, zelfs Apple intern) heeft duidelijke coding guidelines die dit soort code structuren verbiedt…

    Engelse namen gebruiken veranderd de functionaliteit van het programma niet. Ik hoef niet bij een of andere elite groep te horen dus ik gebruik gewoon iets wat in mij opkomt. Als je het anders wilt moet je maar refactoren.

    Maar je verspeelt ermee wel de mogelijkheid tot samenwerken met buitenlandse programmeurs. Daarom kan het geen kwaad jezelf gewoon aan te leren in het engels te programmeren. Zeker niet als je nog enigszins een toekomst daarin ambieert. Maargoed, deze discussie hebben wij al gehad.

    Voor opmaak bestaan er genoeg tools, daar moet een programmeur zich niet mee bezighouden. Als je dat door zo een programma draaien ziet het er net hetzelfde uit als iedere andere taal.

    Je hebt het niet begrepen:P

    Zeg ervan wat je wilt maar mijn versie was JUIST en jouw eerste versie was FOUT.

    De correctheid van het algoritme doet in deze discussie niet mee. Schrijf jij altijd ieder algoritme in een keer goed? I think not.

    Dus als je algoritme fout is dan mag je eender welke taal gebruiken en je methodes in eender welke taal zetten je uitkomst blijft gewoon fout.

    Dat lijkt me logisch, die twee zijn totaal niet aan elkaar gerelateerd.

    Dus ik zou je aanraden ipv de slimmerik uit te hangen beter twee keer na te denken voordat je kritiek geeft op een ander. :sealed:

    Awww, schattig:) Het lijkt je erg dwars te zitten dat jij het in een keer GOED had (zoals jij dat zei) en ik FOUT, maar ik het desondanks toch beter weet.

    Maar goed, genoeg ge-cockblocked… Get over it, and get on… Ik zou graag wat implementaties in andere talen zien, wellicht ook van de beginners? Fouten maken is niet erg. (In tegenstelling tot wat sommigen blijkbaar denken;) )

    Bijdrager
    Elmo1608
    ”Reflex”

    Het lijkt erop dat op een bord van dimensie n er n koninginnen passen.. Grappig:)

    Dit is eigenlijk logisch, want op 1 rij kan maar 1 koningin staan.:)
    Hierbij mijn bijdrage:
    [code:1:13aa4ebcaa]
    #!/usr/bin/perl

    $dimention = 8;

    print "Aantal koninginnen = $dimention";
    [/code:1:13aa4ebcaa]
    :wink:

    Ik heb deze week tentamens, maar ik post na het weekend mijn bijdrage.

    Bijdrager
    Thijs Alkemade
    ”Reflex”

    No pun intended, Thijs, maar ik vind het niet geweldig leesbaar;)

    Zal ik het dan maar weer in AppleScript doen? :P

    ”Elmo1608″

    Dit is eigenlijk logisch, want op 1 rij kan maar 1 koningin staan.

    Dat is het maximum, maar dat kan je niet op elk bord halen. 2 koniginnen op een bord van 2 bij 2 bijvoorbeeld zal je niet lukken.

    Inactief
    Anoniem

    Ah, ja, de specificatie was onvolledig,

    het is

    queens = dim voor x > 3

    Bijdrager
    a la Mac
    ”Reflex”

    Hier dan de juiste implementatie:) Had hem vannacht met mn lamme kop bijna goed, op een x++ na;)

    Compile instructions:
    gcc queens.c -std=c99 -o queens
    run instructions:
    ./queens

    Dat zie ik graag:) (hoewel ik nog steeds niet weet wat die C99-modus is…)

    ”Elmo1608″
    ”Reflex”

    Het lijkt erop dat op een bord van dimensie n er n koninginnen passen.. Grappig:)

    Dit is eigenlijk logisch, want op 1 rij kan maar 1 koningin staan.:)
    Hierbij mijn bijdrage:
    [code:1:f81b094c95]
    #!/usr/bin/perl

    $dimention = 8;

    print "Aantal koninginnen = $dimention";
    [/code:1:f81b094c95]
    :wink:

    Ik heb deze week tentamens, maar ik post na het weekend mijn bijdrage.

    En hier in AppleScript:

    [code:1:f81b094c95]display dialog "Er kunnen 8 dames tegelijk op een bord staan zonder dat ze elkaar kunnen slaan."[/code:1:f81b094c95]

    Zonder variabel dan wel.

    Enige kans op een origineel idee voor programmeeropdracht nummer drie?

    Inactief
    Anoniem
    ӈ

    Dat zie ik graag:) (hoewel ik nog steeds niet weet wat die C99-modus is…)

    Google is je vriend: klik!

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

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