02-04-2013, 18:39
I sidste uge startede jeg på C++ og jeg er ved at have styr på syntax og funktioner. Jeg har et mål om at skrive malware i C++ inden sommerferien er omme.
Jeg er faldet over en side med begynder opgaver til C++, hvor jeg tænkte at det kunne være meget sjovt at se jeres input til disse. Jeg har tænkt mig skamløst at kopiere (og oversætte) opgaveformuleringen fra siden, så alt credit til http://www.cplusplus.com/forum/articles/12974/.
Bemærk at jeg skriver i C++ 4.3.
1: Simpelt while-loop
Skriv et program hvor computeren bliver ved med at spørge efter et givent tal, og først stopper når brugeren har indtastet det. Hvis brugeren så taster det givne tal kommer computeren med meddelsen "Du måtte ikke skrive X". Efter programmet har kørt 10 gange uden at brugeren har tastet X ind skal meddelsen "Du vandt" komme op. Twist: Lav det, så X er det antal gange programmet har kørt, altså 1. gang det kører er tallet 0, 2. gang 1 osv.
2. Gæt computerens tal
Overskriften siger det meste: Computeren tænker på et tilfældigt generet tal mellem 1 og 100, og du skal gætte det. Hver gang du gætter på et tal fortæller computeren dig om dit gæt er højere eller lavere i forhold til det rigtige tal.
3. Lad computeren gætte dit tal
Det her er så den omvendte version af det foregående program. Her skal computeren så gætte dit tal mellem 1 og 100 ved at du fortæller den om dit tal er højere eller lavere end dens gæt. Twist: Computeren må maks bruge 7 forsøg på at gætte dit tal.
4: Kryds og bolle
2-players kryds og bolle spil
Hvis stemningen er for det vil jeg løbende opdatere tråden med flere og sværere opgaver.
Jeg er faldet over en side med begynder opgaver til C++, hvor jeg tænkte at det kunne være meget sjovt at se jeres input til disse. Jeg har tænkt mig skamløst at kopiere (og oversætte) opgaveformuleringen fra siden, så alt credit til http://www.cplusplus.com/forum/articles/12974/.
Bemærk at jeg skriver i C++ 4.3.
1: Simpelt while-loop
Skriv et program hvor computeren bliver ved med at spørge efter et givent tal, og først stopper når brugeren har indtastet det. Hvis brugeren så taster det givne tal kommer computeren med meddelsen "Du måtte ikke skrive X". Efter programmet har kørt 10 gange uden at brugeren har tastet X ind skal meddelsen "Du vandt" komme op. Twist: Lav det, så X er det antal gange programmet har kørt, altså 1. gang det kører er tallet 0, 2. gang 1 osv.
Min løsning til opgaven (Click to View)
Kode:
#include <iostream>
using namespace std;
int main()
{
int run = 0;
int number;
cout << "Skriv et hvilket som helst nummer andet end " << run << endl;
cin >> number;
while(run<10){
while(number!=run){
run++;
cout << "Skriv et hvilket som helst nummer andet end " << run << endl;
cin >> number;
}
break;
}
if(number==run){
cout << "Du måtte ikke skrive " << run;
}
else{
cout << "Du vandt.";}
return 0;
}
2. Gæt computerens tal
Overskriften siger det meste: Computeren tænker på et tilfældigt generet tal mellem 1 og 100, og du skal gætte det. Hver gang du gætter på et tal fortæller computeren dig om dit gæt er højere eller lavere i forhold til det rigtige tal.
Min løsning til opgaven (Click to View)
Kode:
#include <iostream>
#include <stdlib.h> // For at få srand med.
#include <time.h> // For at få time med som seed til srand
using namespace std;
void gaetcom();
int main()
{
gaetcom();
}
void gaetcom()
{
srand(time(0));
int g = rand() % 100; int guess; int runs = 0;
cout << "Gæt et tal mellem 1 og 100: ";
cin >> guess;
while(guess!=g){
if(guess>g){
cout << "Tallet er lavere\n";
cin >> guess;
}
else if(guess<g) {
cout << "Tallet er højere\n";
cin >> guess;
}
runs++;
}
cout << "Du gættede tallet på " << runs << " forsøg!";
}
3. Lad computeren gætte dit tal
Det her er så den omvendte version af det foregående program. Her skal computeren så gætte dit tal mellem 1 og 100 ved at du fortæller den om dit tal er højere eller lavere end dens gæt. Twist: Computeren må maks bruge 7 forsøg på at gætte dit tal.
Min løsning til opgaven (Click to View)
Kode:
#include <iostream>
#include <string>
using namespace std;
void comgaet();
int main()
{
comgaet();
}
void comgaet()
{
cout << "Lad computeren gætte dit tal mellem 1 og 100 ved at sige højere eller lavere!" << endl;
int forskel = 50; string jhl;
int tal = 50; // Computerens gæt starter altid på 50.
cout << "Er dit tal " << tal << "? (Ja=j,Højere=h,Lavere=l) ";
cin >> jhl;
while(jhl!="j"){
// Jeg dividere forskellen med 2 hver gang, for at indsvævre resultatet effektivt.
// Når programmet når ned på 1, skal det stoppe med at halvere tallet.
if(forskel!=1){
forskel = forskel/2;}
// Hvis tallet er højere skal vi bare plusse forskellen på det gættede tal.
if(jhl=="h")
tal = tal + forskel;
// Hvis tallet er højere skal vi bare minusse forskellen på det gættede tal.
if(jhl=="l")
tal = tal - forskel;
cout << "Er dit tal " << tal << "? (Ja=j,Højere=h,Lavere=l) ";
cin >> jhl;}
}
4: Kryds og bolle
2-players kryds og bolle spil
Min løsning til opgaven (Click to View)
Kode:
#include <iostream>
#include <cstdlib>
#include <conio.h>
using namespace std;
void braet();
int tjekvinder(); // tjekkiske kvinder eller tjek vinder?
char felt[10] = {'o','1','2','3','4','5','6','7','8','9'};
int main()
{
int spiller = 1;
int vinder;
braet();
do{
spiller=(spiller%2)?1:2;
char xellery=(spiller == 1) ? 'X' : 'O';
int traek;
cout << "\nDet er spiller " << spiller << "'s tur. \nSkriv et tal: ";
cin >> traek;
char konverteret = '0'+traek;
if(felt[traek]==konverteret&&1<=traek&&traek<=9){
felt[traek]=xellery;
}
else{
cout << "Det ka' du sku ik', klik ENTER og skriv et gyldigt tal" << endl;
spiller--;
getch();
}
braet();
vinder = tjekvinder();
spiller++;
}while(vinder==0);
if(vinder==1){
cout << "\nSpiller " << --spiller << " har vundet!" << endl;
}
if(vinder==2){
cout << "\nUafgjort" << endl;
}
}
int tjekvinder()
{
if (felt[1] == felt[2] && felt[2] == felt[3])
return 1;
else if (felt[4] == felt[5] && felt[5] == felt[6])
return 1;
else if (felt[7] == felt[8] && felt[8] == felt[9])
return 1;
else if (felt[1] == felt[4] && felt[4] == felt[7])
return 1;
else if (felt[2] == felt[5] && felt[5] == felt[8])
return 1;
else if (felt[3] == felt[6] && felt[6] == felt[9])
return 1;
else if (felt[1] == felt[5] && felt[5] == felt[9])
return 1;
else if (felt[3] == felt[5] && felt[5] == felt[7])
return 1;
else if (felt[1] != '1' && felt[2] != '2' && felt[3] != '3' && felt[4] != '4'
&& felt[5] != '5' && felt[6] != '6' && felt[7] != '7' && felt[8] != '8' && felt[9] != '9')
return 2;
else
return 0;
}
void braet()
{
system("cls");
int nr = 1;
cout << "Kryds og bolle!\nSpiller 1: X - Spiller 2: O\n\n";
for(int x=0; x<5;x++){
if(x==1||x==3){
cout << " - - - - -\n";
}
else if(x==0||x==2||x==4){
cout << " " << felt[nr] <<" | " << felt[nr+1] << " | " << felt[nr+2] << endl;
nr += 3;
}
}
}
Hvis stemningen er for det vil jeg løbende opdatere tråden med flere og sværere opgaver.