LostOblivion Skrevet 25. desember 2008 Del Skrevet 25. desember 2008 (endret) Hei, Tenkte å spiffe opp denne gruppen litt ved å lage en tråd hvor noen poster programmeringsutfordringer i C eller C++, og så kan vi se hvem som får til beste løsning, evt kjappeste løsning i algoritmer. Ikke lag noe alt for avansert, som skriv et spill, eller lignende, men helst noe enkelt og trivielt så mange får prøve seg! printf("Husk å putt koden din i kodeblokker sånn som denne."); printf("Evt monotype skrift %s", "sånn som denne."); Endret 25. desember 2008 av LostOblivion Lenke til kommentar
LostOblivion Skrevet 25. desember 2008 Forfatter Del Skrevet 25. desember 2008 Min første utfordring: Lag et enklest mulig program som kan kopiere en fil til en annen. (Den enkleste løsningen som nok mange Unix-brukere tenker på, er vel ikke mulig i Windows, eller er det? :O) Lenke til kommentar
Giddion Skrevet 25. desember 2008 Del Skrevet 25. desember 2008 Er dette nok?, er blitt lat i julen For windows, *nix koden blir litt mindre #include <stdlib.h> int main() { system("copy fil1 fil2"); return 0; } Lenke til kommentar
Dead_Rabbit Skrevet 25. desember 2008 Del Skrevet 25. desember 2008 #include <fstream> using namespace std; int main(int argc, char* argv[]) { ifstream src(argv[1], ios::binary); ofstream dst(argv[2], ios::binary); while(!src.eof()) dst.put(src.get()); return 0; } Fungerer med tekstfiler og binære filer. Lenke til kommentar
LostOblivion Skrevet 25. desember 2008 Forfatter Del Skrevet 25. desember 2008 (endret) Nice! Min ble #define BUFSZ 256 int main() { int bytes; char buf[BUFSZ]; while (bytes = read(0, buf, BUFSZ)) write(1, buf, bytes); return 0; } Hvis programfilen heter cat kan det brukes i Unix på måten du gir programmet stdin og stdout ved å kjøre det som - $ ./cat <innfil >utfil Det kan også brukes som en (ikke redigerbar) plain text skriver ved bare å oppgi utfilen. $ ./cat >utfil Dette kommer i den nye fila... <ctrl c> $ Dette er jo en fin måte for nye å lære seg C/C++ for å forstå enkle problemer. (Og for meg, spesielt til C++. ) Noen andres tur! Endret 25. desember 2008 av LostOblivion Lenke til kommentar
genstian Skrevet 25. desember 2008 Del Skrevet 25. desember 2008 Lag en enkel kalkulator, bare +, -, * og \ over 2 ledd er nødvendig Lenke til kommentar
zotbar1234 Skrevet 29. desember 2008 Del Skrevet 29. desember 2008 #include <fstream> using namespace std; int main(int argc, char* argv[]) { ifstream src(argv[1], ios::binary); ofstream dst(argv[2], ios::binary); while(!src.eof()) dst.put(src.get()); return 0; } Fungerer med tekstfiler og binære filer. Nei, det gjør den ikke: $ g++ -Wall copy.cpp $ od -c source1.txt 0000000 1 0000001 $ ./a.out source1.txt fjas.txt $ od -c fjas.txt 0000000 1 377 0000002 $ Utfordringen da blir -- hvorfor ikke? Lenke til kommentar
Dead_Rabbit Skrevet 29. desember 2008 Del Skrevet 29. desember 2008 Det var merkelig. Jeg prøvde å kopiere selve programmet og et bilde jeg hadde liggende. Det fungerte, men det ser ut til at det blir skrevet ett ekstra tegn til filen. Fikk det til å fungere med koden nedenfor, men spørsmålet blir jo - som zotbar123 sier - hvorfor ikke? #include <fstream> using namespace std; int main(int argc, char* argv[]) { ifstream src(argv[1], ios::binary); ofstream dst(argv[2], ios::binary); char c; while(src.get(c)) dst.put(c); return 0; } Lenke til kommentar
zotbar1234 Skrevet 29. desember 2008 Del Skrevet 29. desember 2008 Det var merkelig. Jeg prøvde å kopiere selve programmet og et bilde jeg hadde liggende. Det fungerte, men det ser ut til at det blir skrevet ett ekstra tegn til filen. Fikk det til å fungere med koden nedenfor, men spørsmålet blir jo - som zotbar123 sier - hvorfor ikke? Det har noe å gjøre med måten stream-tilstanden blir endret på. Opprinnelig sjekket du på eof, og hvis det flagget ikke var satt, antok du at leseoperasjonen lyktes (ville lykkes?). Saken er bare at eof-flagget kan godt være først satt *etter* at man forsøkte å lese seg forbi slutten av filen. Mao. kommer det en ekstra iterasjon i løkken og et eller annet tilfeldig søppel havner i filen. Lenke til kommentar
Dead_Rabbit Skrevet 29. desember 2008 Del Skrevet 29. desember 2008 Ah, så den leser (og returnerer) gibberish for deretter å sette eof-flagget. Det forklarer det jo. Lenke til kommentar
LostOblivion Skrevet 20. januar 2009 Forfatter Del Skrevet 20. januar 2009 Lag et program som runder av til nærmeste hele tall. F eks: Enter number: 3.654 Rounded number: 4.0 Enter number: 3.21 Rounded number: 3.0 Enter number: 3.999999 Rounded number: 4.0 Lenke til kommentar
GeirGrusom Skrevet 21. januar 2009 Del Skrevet 21. januar 2009 template<T> T Round(T value) { int iv = (int)value; return (T)((value - iv) >= ((T).5) ? (iv + 1) : iv); } Lenke til kommentar
LostOblivion Skrevet 21. januar 2009 Forfatter Del Skrevet 21. januar 2009 (endret) syntax error : identifier 'T' Add teh typename? Hvorfor ikke bare - template <typename T> T Round(T value) { return (T)((int)(value + 0.5f)); } Oo Endret 21. januar 2009 av LostOblivion Lenke til kommentar
GeirGrusom Skrevet 21. januar 2009 Del Skrevet 21. januar 2009 (endret) Haha! jeg blandet C# og C++ Og veldig mye enklere ja ^^ Endret 21. januar 2009 av GeirGrusom Lenke til kommentar
LostOblivion Skrevet 21. januar 2009 Forfatter Del Skrevet 21. januar 2009 (endret) Hmm. Lurer på hvorfor templates i C++ krever typename eller class når man deklarerer en type. Hvorfor template<typename T> ... og ikke bare template<T> ... :S Endret 21. januar 2009 av LostOblivion Lenke til kommentar
GeirGrusom Skrevet 21. januar 2009 Del Skrevet 21. januar 2009 Tja, si det. I C# så er det standard syntaks T MyFunction<T>() Men så kan du få den til å begrense det til forskjellige typer, struct for eksempel for å bruke valuetypes istedet for reference types. T MyFunction<T where T : struct) Eller et interface. Men nå er det ganske stor forskjell mellom generics i C# og templates i C++ Men du kan vel også skrive template<class T> i C++ også, forskjellen blir kanskje at en ikke kan bruke primitive datatyper lenger? Men jeg aner egentlig ikke, jeg har alltid bare brukt typename Lenke til kommentar
Dead_Rabbit Skrevet 21. januar 2009 Del Skrevet 21. januar 2009 Hmm. Lurer på hvorfor templates i C++ krever typename eller class når man deklarerer en type. Hvorfor template<typename T> ... og ikke bare template<T> ... :S Jeg antar at det er fordi man også skal kunne skrive ting som: #include <iostream> #include <string> using namespace std; template<class T> class Foo { public: Foo(T t) : object(t) { } void print(); private: T object; }; template<class T> void Foo<T>::print() { cout << "general: " << object << endl; } template<> void Foo<int>::print() { cout << "specialized: " << object << endl; } Hvis du skriver template<T> istedenfor template<class T>, så er det en template specialization. Lenke til kommentar
LostOblivion Skrevet 23. januar 2009 Forfatter Del Skrevet 23. januar 2009 Hva mener du? Hva er en template specialization? Lenke til kommentar
Dead_Rabbit Skrevet 23. januar 2009 Del Skrevet 23. januar 2009 Hvis vi ser veldig enkelt på det, kan det nesten sees på som overloading bare at det er for templates. STFW! Lenke til kommentar
Vighilicious Skrevet 29. januar 2009 Del Skrevet 29. januar 2009 Skriv et program som summerer alle elementene i en tabell (array) av heltall (integer) som er definert på denne måten: int a[] = {1, 2, 3, 4, 5, 6}; Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå