abonnement Unibet Coolblue Bitvavo
pi_115260481
quote:
0s.gif Op dinsdag 7 augustus 2012 21:14 schreef thenxero het volgende:
Volgens mij werkt ie wel gewoon goed.

edit: briljant programma!! Je kan er direct mee aan de slag. Precies wat ik zocht!
Zei ik toch? :P
Maar mooi dat het bevalt.
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_115283667
quote:
0s.gif Op dinsdag 7 augustus 2012 20:38 schreef t4rt4rus het volgende:

Heb je nog vragen over C++? :P
Als je je verveelt, kan je altijd op zoek gaan Herb Sutter's Exceptional C++ (en vervolg), waarin vraagstukken staan voor C++-programmeurs. Het is geen goedkoop boek, maar als je er geen problemen mee hebt, zijn er online ook pdf-versies te vinden. Sommige stukjes zijn een beetje verouderd door C++11, maar het overgrote deel is nog steeds erg nuttig.
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_115292673
quote:
0s.gif Op dinsdag 7 augustus 2012 20:42 schreef thenxero het volgende:

[..]

Ik wil binnenkort een keertje vraag 11 van PE aanpakken:

[..]

Daarvoor moet ik dus een matrix gaan laden. Heb er een beetje op gegoogled, maar er zijn zoveel mogelijkheden met fstream dat ik er niet echt uitkom. Maar heb eerlijk gezegd ook nog niet echt mijn best gedaan.
Mijn 'oplossing':

1
2
3
4
unsigned matrix[20][20] = {
    { 8,  2, 22, 97, 38, 15,  0, 40,  0, 75,  4,  5,  7, 78, 52, 12, 50, 77, 91,  8},
    [...]
};

Dit vond ik minder werk dan de getallen opslaan in een bestand en die daarna inladen. Nooit te moeilijk denken. :)

SPOILER
Om spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_115294434
quote:
0s.gif Op woensdag 8 augustus 2012 15:59 schreef GS42 het volgende:

[..]

Mijn 'oplossing':
[ code verwijderd ]

Dit vond ik minder werk dan de getallen opslaan in een bestand en die daarna inladen. Nooit te moeilijk denken. :)

SPOILER
Om spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.
En heb je dan handmatig overal komma's gezet? (Dat is wel takkenwerk)

Ik wou sowieso nog leren hoe ik een matrix moet laten omdat ik dat later nog wil gebruiken, dus dit was een mooi moment om het alvast te leren. Het is me ondertussen gelukt om de matrix te laden, ik krijg alleen nog het foute antwoord :P .
pi_115294916
quote:
0s.gif Op woensdag 8 augustus 2012 16:37 schreef thenxero het volgende:

[..]

En heb je dan handmatig overal komma's gezet? (Dat is wel takkenwerk)
Ha, nee joh. Gewoon find/replace en de spaties vervangen door een komma en een spatie.

quote:
Ik wou sowieso nog leren hoe ik een matrix moet laten omdat ik dat later nog wil gebruiken, dus dit was een mooi moment om het alvast te leren. Het is me ondertussen gelukt om de matrix te laden, ik krijg alleen nog het foute antwoord .
Ah, dan doe je het netter dan ik. :P
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_115294956
Voor dat soort dingen is Python's "eval" function een uitkomst. Die neemt een string als input, en voert die string uit als Python code.
pi_115296847
Ik hou het voorlopig even bij C++
pi_115297461
quote:
0s.gif Op woensdag 8 augustus 2012 16:37 schreef thenxero het volgende:

[..]
Het is me ondertussen gelukt om de matrix te laden, ik krijg alleen nog het foute antwoord :P .
Ik was vergeten dat diagonaal ook van linksonder naar rechtsboven kan zijn :') . Nu wel goed :) .
pi_115308700
Is het mogelijk om een vector te verwijderen? Ik heb zitten klooien met vector::erase en vector::clear, maar de waardes blijven staan. Het enige wat er volgens mij verandert is dat als je vector::push_back gebruikt dat hij de oude vector overschrijft.

Voor mijn doeleinden zou het ook genoeg zijn om de hele vector in nullen te veranderen en dan weer overschrijfbaar te maken. Dit kan ik wel doen op zo'n manier, maar dat lijkt me onnodig omslachtig:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector<int> a;
    a.push_back(1);
    a.push_back(2);
    a.push_back(3);
    a.push_back(4);
    a.push_back(5);
    a.push_back(6);
    int size = a.size();
    a.clear();
    for(int i=0; i<size; i++)
    {
        a.push_back(0);
    }
    a.clear();
    a.push_back(55);
    a.push_back(66);
    cout << a[0] << " " << a[1] << " " << a[2] << " " << a[3] << " " << a[4] << " " << a[5];
    return 0;
}
pi_115309062
Je kan zoiets doen:
1fill(a.begin(), a.end(), 0);
Maar 't is me niet geheel duidelijk wat je met verwijderen bedoelt.
pi_115309078
1    cout << a[0] << " " << a[1] << " " << a[2] << " " << a[3] << " " << a[4] << " " << a[5];

Je leest hier voorbij de grenzen van de vector. In je voorbeeld heeft a op dit moment maar 2 waarden, namelijk 55 en 66. Dus verder dan a[1] ( < a.size() ) mag je niet lezen.

En verder lijkt je code prima: met vector.clear() maak je de vector helemaal leeg.
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_115309132
quote:
0s.gif Op woensdag 8 augustus 2012 21:41 schreef GS42 het volgende:

[ code verwijderd ]

Je leest hier voorbij de grenzen van de vector. In je voorbeeld heeft a op dit moment maar 2 waarden, namelijk 55 en 66. Dus verder dan a[1] ( < a.size() ) mag je niet lezen.

En verder lijkt je code prima: met vector.clear() maak je de vector helemaal leeg.
Ik krijg als output

155 66 0 0 0 0

Die nullen blijven staan en de vector is dus niet kleiner geworden. Ik krijg ook geen error dat ik buiten de grenzen zit of zo :? .
pi_115309172
quote:
0s.gif Op woensdag 8 augustus 2012 21:41 schreef thabit het volgende:
Je kan zoiets doen:
[ code verwijderd ]

Maar 't is me niet geheel duidelijk wat je met verwijderen bedoelt.
Met verwijderen bedoel ik dat het niet meer bestaat. Dus dat ik weer opnieuw kan zeggen:
1vector<int> a;
alsof ie nog niet bestaat. Of dat ik de vector weer kan gebruiken alsof hij nooit bestaan heeft.
pi_115309278
Ofwel je gebruikt new en delete (en dus een pointer naar een vector), ofwel je gebruikt accolades om de scope van a aan te geven.
pi_115309322
Maar dan nog zie ik niet wat er mis is met clear.
pi_115309496
quote:
0s.gif Op woensdag 8 augustus 2012 21:42 schreef thenxero het volgende:

[..]

Ik krijg als output
[ code verwijderd ]

Die nullen blijven staan en de vector is dus niet kleiner geworden. Ik krijg ook geen error dat ik buiten de grenzen zit of zo :? .
Dat eerste is mogelijk, dat tweede klopt niet en het derde is gegarandeerd. Dat de nullen blijven staan mag C++ doen: de lengte van de vector is echter wel veranderd: controleer maar met vector.size():

1
2
3
4
5
6
std::vector<int> a;
for (int idx = 0; idx < 10; ++idx)
   a.push_back(idx);
std::cout << "Vector size: " << a.size() << '\n';
a.clear();
std::cout << "Vector size: " << a.size() << '\n';

Dat de waardes eigenlijk nog ergens in het geheugen bestaan maakt niet uit: net als op de harde schijf wordt iets dat verwijderd is, niet gelijk helemaal weggegooid maar alleen aangemerkt als 'overschrijfbaar'. Dit doet er verder niet toe: je moet nooit verder lezen dan vector.size() - 1. Dat is jouw verantwoordelijkheid en C++ zal je er niet voor waarschuwen als je het wel doet.

En nee, je kunt niet in dezelfde scope twee maal dezelfde variabele declareren. Je kunt a wel opnieuw toekennen:

1
2
3
vector<int> a;
// code
a = vector<int>(); // nu is a een nieuwe, lege vector
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_115310046
Waar ik eigenlijk mee bezig is, is PE 13. Ik moet dus 100 getallen van 50 cijfers bij elkaar optellen. Van het eerste getal zet ik de cijfers opeenvolgend in een vector genaamd vec1. Dan wil ik steeds het volgende getal bij het eerste optellen. Iteratief wil ik vec2 de vector laten zijn die het nieuwe op te tellen getal representeert. Bij dat laatste gaat er dus volgens mij iets mis.

Bij het "optellen" van de eerste twee vectors krijg ik het goede resultaat, maar als ik de derde erbij op wil tellen gaat het fout. Ik krijg geen foutmelding maar de code compileert niet eens.

SPOILER
Om spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.
pi_115310111
quote:
0s.gif Op woensdag 8 augustus 2012 21:43 schreef thenxero het volgende:

[..]

Met verwijderen bedoel ik dat het niet meer bestaat. Dus dat ik weer opnieuw kan zeggen:
[ code verwijderd ]

alsof ie nog niet bestaat. Of dat ik de vector weer kan gebruiken alsof hij nooit bestaan heeft.
Met a.swap(std::vector<int>()); (a = std::vector<int>();)
Heb je weer een nieuwe vector.
pi_115310224
Wacht, nu zie ik opeens iets. Ik probeer toegang te verkrijgen tot vec2[-1].
pi_115310315
Ik ben al bij opdracht 6...
Had ze al eerder gedaan maar ben loginnaam vergeten. :P

Even kijken hoe moest 6 nog maar.
Sum_n(n)^2 - Sum_n(n^2) = 2*Sum_i>j(ij)
En dat voor de eerste 100.

Oh easy.

edit ho ik vergeet de keer 2 nog...

[ Bericht 7% gewijzigd door t4rt4rus op 08-08-2012 22:12:20 ]
pi_115312242
quote:
11s.gif Op woensdag 8 augustus 2012 22:02 schreef thenxero het volgende:
Wacht, nu zie ik opeens iets. Ik probeer toegang te verkrijgen tot vec2[-1].
Dit heb ik nu opgelost. Nu krijg ik geen errors/failures meer maar klopt de optelling niet meer :( . Misschien maar even pauze nemen, want ik zie niks meer.
pi_115312490
quote:
0s.gif Op woensdag 8 augustus 2012 22:37 schreef thenxero het volgende:

Dit heb ik nu opgelost. Nu krijg ik geen errors/failures meer maar klopt de optelling niet meer :( . Misschien maar even pauze nemen, want ik zie niks meer.
Ik denk dat het iets te maken heeft met het feit dat bij een optelling het resulterende getal soms langer wordt...
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_115312491
quote:
0s.gif Op woensdag 8 augustus 2012 21:42 schreef thenxero het volgende:

[..]

Ik krijg als output
[ code verwijderd ]

Die nullen blijven staan en de vector is dus niet kleiner geworden. Ik krijg ook geen error dat ik buiten de grenzen zit of zo :? .
Heheheheh, dit is eigenlijk een goede oefening. Lees hoe een vector werkt en dan krijg je door wat er hier gebeurt. Het korte antwoord is dat clear() wel goed is, en dat de []-operator geen enkele check uitvoert (want performance); als je wel boundary-checks wilt hebben, gebruik dan at(i).
More oneness, less categories
Open hearts, no strategies
Decisions based upon faith and not fear
People who live right now and right here
pi_115312890
quote:
0s.gif Op woensdag 8 augustus 2012 22:41 schreef GS42 het volgende:

[..]

Ik denk dat het iets te maken heeft met het feit dat bij een optelling het resulterende getal soms langer wordt...
Ja, had daar al voor gecorrigeerd... maar toch gaat er nog iets mis.
pi_115313307
quote:
void add(vector<int>* vec1, vector<int>* vec2)
Hier is overigens waar C++ references voor heeft geintroduceerd; gebruik beter

1void add(vector<int> &vec1, vector<int> &vec2)

en vervang de derefs (->'s) door gewone punten voor hetzelfde resultaat (semantisch), maar schonere code (en vrijheid voor de compiler iets anders te doen dan pointers passen, mocht er iets beters te doen zijn).
More oneness, less categories
Open hearts, no strategies
Decisions based upon faith and not fear
People who live right now and right here
pi_115313401
Voor grote getallen zijn er libraries zoals MPIR.
pi_115313495
quote:
2s.gif Op woensdag 8 augustus 2012 22:54 schreef trancethrust het volgende:

[..]

Hier is overigens waar C++ references voor heeft geintroduceerd; gebruik beter
[ code verwijderd ]

en vervang de derefs (->'s) door gewone punten voor hetzelfde resultaat (semantisch), maar schonere code (en vrijheid voor de compiler iets anders te doen dan pointers passen, mocht er iets beters te doen zijn).
Thanks.
quote:
2s.gif Op woensdag 8 augustus 2012 22:56 schreef thabit het volgende:
Voor grote getallen zijn er libraries zoals MPIR.
Dat is vast niet zo leerzaam als dit geklooi :)
pi_115315551
Trouwens, nu we toch weer richting een nieuw vervolg gaan, vind ik wel dat we het eens serieus over die OP moeten hebben. Verschillende dingen:

- Waarom die plaatjes van Dummies-boeken? Die boeken zijn toch nooit het onderwerp geweest van dit topic? Wat is het nut?

- De opmerking "beperk je niet tot [...]" is wat denigrerend. Een duidelijke omschrijving van wat voor informatie behulpzaam is bij een vraag, lijkt op z'n plaats.

- Het "vorig topic" gedeelte is toch overbodig nu het een reeks is? En maken mods het nog steeds centraal?

- Die FAQ is ... tenenkrommend slecht. Serieus, print het uit, verbrand het en begin overnieuw. :P

- Het "handige links" gedeelte is een goed idee, maar de uitvoering laat te wensen over. Een verzameling van goede links die in de topics zijn genoemd is echter prima.

Samenvattend: ik geloof niet dat er iets nuttigs in staat en verscheidene contra-productieve dingen. Zullen we eens een nieuwe schrijven? Wie wil wat doen? ;)
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_115317316
Hallo,

Ik loop al een tijd met een idee om een programma te maken in c++. Ik weet echter niet of het haalbaar is in c++. Het gaat erom dat het veel informatie van Google en social media moet weten te plukken, het te organiseren en er ook grote hoeveelheden weer kan uploaden naar de dit soort sites.

In hoeverre is dit mogelijk in c++ of raden jullie me voor dit soort toepassingen een andere programmeertaal aan?
pi_115322082
quote:
0s.gif Op woensdag 8 augustus 2012 23:56 schreef Carlos93 het volgende:
Hallo,

Ik loop al een tijd met een idee om een programma te maken in c++. Ik weet echter niet of het haalbaar is in c++. Het gaat erom dat het veel informatie van Google en social media moet weten te plukken, het te organiseren en er ook grote hoeveelheden weer kan uploaden naar de dit soort sites.

In hoeverre is dit mogelijk in c++ of raden jullie me voor dit soort toepassingen een andere programmeertaal aan?
Alles kan, maar zonder ervaring kan het allemaal iets minder vlot.
quote:
0s.gif Op woensdag 8 augustus 2012 23:28 schreef GS42 het volgende:
Trouwens, nu we toch weer richting een nieuw vervolg gaan, vind ik wel dat we het eens serieus over die OP moeten hebben. Verschillende dingen:

- Waarom die plaatjes van Dummies-boeken? Die boeken zijn toch nooit het onderwerp geweest van dit topic? Wat is het nut?

- De opmerking "beperk je niet tot [...]" is wat denigrerend. Een duidelijke omschrijving van wat voor informatie behulpzaam is bij een vraag, lijkt op z'n plaats.

- Het "vorig topic" gedeelte is toch overbodig nu het een reeks is? En maken mods het nog steeds centraal?

- Die FAQ is ... tenenkrommend slecht. Serieus, print het uit, verbrand het en begin overnieuw. :P

- Het "handige links" gedeelte is een goed idee, maar de uitvoering laat te wensen over. Een verzameling van goede links die in de topics zijn genoemd is echter prima.

Samenvattend: ik geloof niet dat er iets nuttigs in staat en verscheidene contra-productieve dingen. Zullen we eens een nieuwe schrijven? Wie wil wat doen? ;)
Goed punt, en niet dat alleen; de beschrijving van C++ (een 'verbetering' op C) slaat ook de plank volledig mis. Het is een andere taal dat C als subset heeft puur omdat C veelgebruikt is. Tegenwoordige tijd. C is nog altijd populair in bij high-performance toepassingen.
More oneness, less categories
Open hearts, no strategies
Decisions based upon faith and not fear
People who live right now and right here
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')