PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C++]Programmieraufgaben



QpL
07.07.2008, 23:32
Hi

Ich habe vor einiger Zeit mit C++ angefangen. Jetzt nach einer kleinen Pause möchte ich mich jetzt in den Ferien etwas mehr in C++ arbeiten - das Problem: Ich hab einfach keine Idee was man programmieren könnte.

Also wollte ich fragen, ob ihr ein paar Ideen habt. (leicht - Medium)

Einen + - / * Taschenrechner habe ich bisher gecodet, und das ist auch nicht das Gelbe vom Ei.

Gruße
Noob1233

abcgirl
07.07.2008, 23:41
Was mir gerade einfällt vill ein Tool das für einen die Eigenen Dateien aufräumt also z.B. alle .jpg .png .gif... dateien in einen Ordner schmeißt. Vill ganz nützlich so ein Tool :) Kenn keins das das kann^^. Natürlich mit mehr Datei endungen z.B. exe in Programme/Tools oder os naja du kannst die Idee ja ausreifen wenn du willst kommen vill ja noch ein paar Interessante Ideen. Falls du dich für diese Entscheiden solltest kannste mich ja per PM informieren. ;)

M.f.G.
abcgirl

X21
08.07.2008, 00:23
Da codet der arme Kerl maximal ne Stunde dran :)

abcgirl
08.07.2008, 00:25
Aber er hat was zu tun :). Und wer weiß ob es das hinkriegt ;P. Hast du noch nen vorschlag also ich fänd es toll wenn er das machen würde. Also ich schmeiß immer allen scheiß in Eigene Dateien wenn der Desktop zu voll ist :).

M.f.G.
abcgirl

Dr.ChAoS
08.07.2008, 01:07
Ich könnte dir die Aufgabe stellen die wir neulich in der Schule machen mussten. Ich fand die Aufgabe total simpel, aber andere haben sich schwer getan.
Also es geht darum ein Lotto Programm zu schreiben. Das Programm soll aus 7 Funktionen bestehen:

void main():
Hier soll nichts anderes als zwei Arrays deklariert werden die im weiteren Programm verwendet werden. Außerdem soll ein Menü programmiert werden in dem man wählen kann was mach machen möchte (spielen oder beenden). Nach jedem Spieldurchlauf soll man wieder ins Menü zurückspringen.

void tippen(int *):
Hier werden die 6 Zahlen vom Benutzer entgegen genommen. Mit der Funktion doppelt() soll geprüft werden ob eine Zahl schon eingegeben wurde.

void ausgeben(int *):
Die Funktion gibt die Zahlen Formatiert auf dem Bildschirm aus.

void ziehen(int *):
Es werden 6 Zufallszahlen vom Computer gezogen die wieder mittels der doppelt() Funktion geprüft werden.

void sortieren(int *):
Diese Funktion sortiert 6 Zahlen in einem Array in aufsteigender Reihenfolge.

void auswerten(int *, int *):
Hier werden die Eingaben mit den Zufallszahlen verglichen und das Ergebnis mit der ausgeben() Funktion auf dem Bildschirm ausgegeben.

bool doppelt(int *,int):
Diese Funktion prüft ob der int Wert bereits in dem übergebenen Array vorhanden ist.

TIPP: Beachte dass die Lotto Zahlen nur von 1 bis 49 gehen!
-Alle Zahlen müssen vor dem Ausgeben sortiert werden!
-Arbeite mit Prototypen

Das ist zwar nicht sonderlich schwer, aber mir hats Spaß gemacht. Ich hoffe dass ich dir damit helfen konnte.
MfG
Dr.ChAoS

QpL
08.07.2008, 01:20
Danke für die bisherigen Ideen - bin für weitere offen :)

Das mit dem Lottoprogramm finde ich klasse. Ich denk da setz ich mich ran :)

mbeezy
08.07.2008, 01:25
Ich selber kenne mich mit Programmieren und C/C++ nicht aus, deshalb weiß ich nicht, wie schwer folgende Aufgabe ist:

Ein Freund von mir hat in Delphi ein Programm geschrieben, das nützlich ist, sofern man Musik hört während man im TS ist. Das Programm regelt grob gesagt die Lautstärke von Winamp, wenn jemand im Channel spricht. Sobald jemand redet, setzt das Programm die Winamp-Lautstärke auf einen vorher vom Benutzer festgelegten Wert. Spricht keiner mehr, wartet das Programm x Sekunden ab (kann der User festlegen), um dann mit einer vom User festgelegten Geschwindigkeit die Lautstärke wieder auf Y anzuheben. Find ich ganz nützlich.



P.S. Falls jemand das haben möchte: http://www.wofe.ch/TSAMP.php

Dr.ChAoS
08.07.2008, 01:26
Wenn du willst kann ich dir meine Version hochladen sobald du fertig bist. ;)
MfG

QpL
08.07.2008, 01:32
Ich selber kenne mich mit Programmieren und C/C++ nicht aus, deshalb weiß ich nicht, wie schwer folgende Aufgabe ist:

Ein Freund von mir hat in Delphi ein Programm geschrieben, das nützlich ist, sofern man Musik hört während man im TS ist. Das Programm regelt grob gesagt die Lautstärke von Winamp, wenn jemand im Channel spricht. Sobald jemand redet, setzt das Programm die Winamp-Lautstärke auf einen vorher vom Benutzer festgelegten Wert. Spricht keiner mehr, wartet das Programm x Sekunden ab (kann der User festlegen), um dann mit einer vom User festgelegten Geschwindigkeit die Lautstärke wieder auf Y anzuheben. Find ich ganz nützlich.



P.S. Falls jemand das haben möchte: http://www.wofe.ch/TSAMP.php

Naja - ist für mich momentan unschaffbar. Danke Trotzdem.
und Dr.ChAoS: Gerne - ich melde mich wenn ich fertig bin :)

Tomo
08.07.2008, 01:40
hehe abcgirl da kriegst du wohl kein Programm und du musst deine Drecksarbeit selbst machen^^

Ich versuchs mal zu programmieren brauch nämlich selbst noch Übung^^
Melde mich dann, entweder bis 3:00 oder morgen (habe schon angefangen)

abcgirl
08.07.2008, 10:13
Ok, Danke schön Tomo ;) das ich die "Drecksarbeit" nicht selbst machen muss :). Voll grob ausgedrückt :D. Mal gucken wie es wird freu mich schon drauf.

M.f.G.

abcgirl

Tomo
08.07.2008, 12:57
Fertig ;) (das für abcgirl)
Rapidshare: http://rapidshare.com/files/128098510/FileSort.zip
Uploaded.to: http://uploaded.to/?id=858cke

Bild: http://www.bilder-space.de/show.php?file=l15h3ihpIG0qvha.JPG

Die Dateien im ordner der unten angegeben wird, werden in den jeweiligen Unterordner verschoben.
Falls was geändert werden soll sag Bescheid^^

@Dr. Chaos: Was bedeutet "Arbeite mit Prototypen"?
Würd mich auch gern an das programm setzen und uploaden wenn Noob fertig ist, ist ja sein Thread, er darf zuerst^^

Dr.ChAoS
08.07.2008, 13:29
Das bedeutet dass du Für jede Funktion einen Prototyp erstellen sollst. Mit Prototypen ist es möglich Funktionen an einem beliebigen Ort nach den Prototypen aufzurufen. Schlechte Erklärung^^. Hier ein kleines Beispiel:



#include <iostream>
using namespace std;

//Das hier ist jetzt der Prototyp:
void ausgeben(int);

void main(){
ausgeben(12);
}

void ausgeben(int zahl){
cout<<"Der Funktion wurde die Zahl "<<zahl<<" uebergeben!"<<endl;
}


Ohne den Prototyp würde der Compiler die Funktion nicht finden und einen Fehler ausgeben. Aber so ist es eben übersichtlicher und weniger fehleranfällig.
MfG
Dr.ChAoS

QpL
08.07.2008, 13:46
Ohne den Prototyp würde der Compiler die Funktion nicht finden und einen Fehler ausgeben. Aber so ist es eben übersichtlicher und weniger fehleranfällig.
MfG
Dr.ChAoS

DAS war heute nacht mein häufigster Fehler :).

Übrigens: kann es sein dass ihr C Programmiert? Weil du mit "void main()" arbeitet ^^

Greetings

Dr.ChAoS
08.07.2008, 13:49
Nein, ich schreibe eigentlich int main() weil ich Debian verwende und g++ es nicht anderst kennt, aber ich bin es gewohnt von der Schule. Da werden wir praktisch zum void main() schreiben gezwungen^^.

Tomo
08.07.2008, 14:14
Ich glaub ich lass es^^ mir fehlt bei Konsolenprogrammen einfach das Wissen, habe bisher nur einmal eins gemacht und das hatte weniger als 10 Zeilen^^

Edit: Allerdings hab ich mal im Dezember/Januar ein Lottozahlengenerator gemacht für paar Kollegen die damit ihre Lottozahlen ausgewählt haben^^
http://uploaded.to/?id=a5wgec
http://www.bilder-space.de/thumb/v90E8UVlA4LAju4.JPG (http://www.bilder-space.de/show.php?file=v90E8UVlA4LAju4.JPG)
Man kann einstellen wieviele Reihen erstellt werden sollen udn bei mehr als 1 werden die im Editor geöffnet.
Diese Liste kann man dann auf 6 Zahlen prüfen lassen und man bekommt eine neue Liste wo mind 3 richtige in jeder Reihe sind.

hateme666
08.07.2008, 16:52
ich weiß ja net wieso dir wissen für konsolenprogramme fehlt wenn du GUI's erstellst....
das eine is doch die Grundlage für das andere....

Tomo
08.07.2008, 18:29
Hab damals mit GUI angefangen^^ Weiß net mehr genau

QpL
08.07.2008, 18:55
Da habe ich auch schon eine Frage.. Wie Sag ich dem Ziehungsprogramm das 49 das Limit ist?

Tomo
08.07.2008, 19:00
Ich würds so machen aber gibt auch andere Möglichkeiten:



randomize();
int zahl = random(49)+1;

abcgirl
08.07.2008, 19:43
Hey, Danke nice geworden. Und das alles für mich. :D Was man ändern könnte ist vill das nicht alle ordner erstellt werden wenn es keine Dateien dafür gibt. Und vill noch ein ordner für Archive/images. Aber sonst echt gut geworden Danke schön nochmal ;).

M.f.G.
abcgirl

Dr.ChAoS
08.07.2008, 19:56
Da habe ich auch schon eine Frage.. Wie Sag ich dem Ziehungsprogramm das 49 das Limit ist?#

Ich habs so gemacht:
rand()%49+1;

QpL
08.07.2008, 20:01
Da habe ich auch schon eine Frage.. Wie Sag ich dem Ziehungsprogramm das 49 das Limit ist?#

Ich habs so gemacht:
rand()%49+1;

Danke, klappt :)

lol es kommen immer die gleichen Zahlen bei der Variante :)

42 44 14 41 11

SO SOLLTE LOTTO SEIN!

abcgirl
08.07.2008, 20:12
Du weißt ja du musst jetzt jede woche hier die möglichen Lotto zahlen posten ;P.

M.f.G.
abcgirl

Tomo
08.07.2008, 20:13
Hey, Danke nice geworden. Und das alles für mich. :D Was man ändern könnte ist vill das nicht alle ordner erstellt werden wenn es keine Dateien dafür gibt. Und vill noch ein ordner für Archive/images. Aber sonst echt gut geworden Danke schön nochmal ;).

M.f.G.
abcgirl

Done:
RS: http://rapidshare.com/files/128189916/FileSort.zip
Uploaded.to: http://uploaded.to/?id=j8dj3z
Jetzt werden Ordner nur erstellt wenn auch Dateien da sind.
und Archive/Images sind hinzugefügt.
Falls du meintest für Archive nen eigenen ordner und für Images nen eigenen, sag Bescheid, ist Arbeit von 1min^^

@Noob1233: Kommen bei meiner Variante die ich oben geschrieben habe auch immer die selben Zahlen?

Added after 4 minutes:

@Noob1233: Für Dr.Chaos' Variante auch noch "randomize();" davor setzen (muss nur einmal im ganzen programm ausgeführt werden)

QpL
08.07.2008, 20:28
Deine Variante geht nicht - Fehler...

und wenn ich bei Dr.Chaos Variante "randomize();" setze kommt ein fehler

19 \My Documents\Lotto.cpp expected constructor, destructor, or type conversion before ';' token

abcgirl
08.07.2008, 20:37
Ne genau das was ich wollte Juhu ;P. Danke Danke Danke :D. Aber eins musste mir noch erklären wofür "Speichern" ist wenn man "Sortiert" hat. Aber sonst echt geil. Noch ne frage wenn man ne idee hat kann man dich fragen ob du die einem verwirklichst? :) Lernen imom php und deswegen keine Zeit um was anderes zulernen weil ich dabei noch ne inet seite mach. :) Darf man dich in Icq adden?

M.f.G.
abcgirl

Tomo
08.07.2008, 20:49
Yau kannst mich adden bei ICQ (nummer ist im profil)
"Speichern" ist dazu da um die Endungen zu speichern (und den ordner pfad) wenn man etwas ändert.


@Noob1233: http://www.c-plusplus.de/forum/viewtopic-var-t-is-172876.html
Schau dir das mal an; ab "Eine Formel, die würfelt" gehts darum dass immer die selben Zahlen kommen

Dr.ChAoS
09.07.2008, 10:11
@Noob1233:
Meine Variante geht ganz sicher, sonst würde mein Programm ja nicht funktionieren. Hier ein kleiner Beispiel Source:


#include <iostream>
using namespace std;
#include <time.h>
#include <stdlib.h>

void main(){
int zufall;

srand((unsigned)time(NULL));
zufall = rand()%49+1;
cout<<zufall<<endl;
}
Teste es ;)
MfG
Dr.ChAoS

Tomo
09.07.2008, 13:12
Jap das srand hat gefehlt^^, wenn das nicht da ist, gibts immer die selben Zahlen.

berlinermauer
09.07.2008, 13:38
leute eure Sortierung is easy^^


move *.jpg Bilder\*.*
move *.gif Bilder\*.*
move *.mp3 Musik\*.*
als .bat speichern... total easy !

biete mich für vb.net und delpgi an. aber nichts mit cryptern und so.. bots mal sehen

QpL
09.07.2008, 17:09
http://paste.nn-d.de/503

Hmm meine C++ kenntnisse sind sehr schlecht geworden - was ist falsch?
(abgesehen davon, dass ich n bissl umständlich arbeite)

noctem
09.07.2008, 19:02
Du übergibst deinen Funktionen in main() keine Integer-Arrays. Genau das wollen sie aber. ;)

Tomo
14.07.2008, 23:52
Schaffst du es? ;) ist 6 Tage her seit deinem letzten Post^^

-[RiDER]-
15.07.2008, 11:41
Hi :D

Falls noch jemand was zum Knechten haben will, eine Aufgaben, die letztens im Usenet in der Gruppe de.comp.lang.c (und auch de.sci.mathematik, de.comp.lang.misc) gestellt wurde:


Angewandte Mathematik und Programmierung

Thema:
Integer-Partitionierung und Entscheidungs- bzw. Wertetabelle generieren.

Aufgabe:
Es ist programmatisch eine Entscheidungstabelle effizient zu generieren.
Es handelt sich durchweg nur um die Menge der natürlichen
Zahlen >= 0, also um Integerwerte.
Es geht darum, einen Wert (v) in einer Schleife (oder mehreren Schleifen)
in 6 Teile zu splitten (A,a,B,b,C,c; siehe unten) und alle möglichen
Kombinationen effizient zu ermitteln. D.h. es sollten unnötige
Schritte (insb. Schleifendurchläufe und Abfragen) nach Möglichkeit
vermieden bzw. minimiert werden.

Inputwerte (hier nur Beispielwerte):
k = 5 (k ist immer > 0)
v = 30 (v ist immer > k)

Die zu generierende Tabelle hat 8 Spalten:
A a B b C c D d <-- Spalten-Name
[0] [1] [2] [3] [4] [5] [6] [7] <-- Element-Index

Bei den Spalten mit den Kleinbuchstaben handelt es sich um boolsche Werte (0/1).

Die Regeln:
1.) A kann Werte 0 bis k haben
2.) a+b+c muss immer 1 ergeben
3.) Die Summe A+a+B+b+C+c muss v ergeben
Natürlich impliziert dies u.a. folgendes:
A=v-a-B-b-C-c
B=v-A-a-b-C-c
C=v-A-a-B-b-c
4.) D=A+B
5.) d=a+b

Man kann A+a+B+b (entspricht D+d) als Hauptgruppe ansehen
und C+c als die Restgruppe (von v).
Ziel ist alle Hauptgruppen zu ermitteln, wobei dann die Werte
der jeweiligen Restgruppe natürlich automatisch auch stimmen.

Das Ziel:
Alle möglichen Kombinationen, die diese Regeln erfüllen
in kleinstmöglicher Anzahl von Schritten (Schleifendurchläufen)
finden und tabellarisch auflisten, bzw. eine 2-dim array damit füllen.
Es dürfen natürlich keine Reihenduplikate vorkommen.
Die Methode muss für jedes gültige Inputpaar v,k funktionieren,
mindestens bis k=100 und v=500, wobei wie gesagt gilt 0<k<v,
oder anders gesagt v>k>0.

Zusatzoption:
Wenn es direkt machbar ist, so sollte die Tabelle implizit
nach den beiden Spalten D und d (als Einheit) aufsteigend
(oder absteigend) sortiert sein. Ansonsten muss man es
entsprechend sortieren durch einen, leider kostspieligen,
sort()-Aufruf. Also, nach Möglichkeit den sort()-Aufruf einsparen
und stattdessen versuchen die Tabelle entsprechend
irgendwie intelligent zu generieren.

Lösungsvorschläge:
Sollten in Standard-Pseudocode sein, wobei alles 0-basiert sein
sollte (d.h. Indices sollten bei Element 0 beginnen und nicht
wie in einigen Sprachen üblich bei 1).
Eine direkte Lösung in Standard C ist auch OK.
D.h. die Spalten kann man auch als Vektor-Element ansehen
und ansprechen; z.B. wäre Spalte b gleich Element 3 (vgl. oben).
ABER: es gibt meines Wissens keine Formel um die Anzahl
der gültigen Möglichkeiten vorweg auszurechnen (müsste man auch
noch ermitteln falls für die Lösung der Aufgabe unbedingt nötig).
Also, es muss nicht unbedingt in einem Vektor bzw. Array realisiert werden,
es kann auch einfach zeilenweise ausgeprinted werden.

Viel Spass

GreetZ RiDER :D :D :D

DeCeN
21.07.2008, 12:39
hab vor ner ewigkeit auch mal in c++ ein lottomod geschrieben. leider ohne gui. muss mal wieder ein bissl c++ lernen. hab damals in so nem anderen board so aufgaben gefundnen. hier is mal ein link falls es wen interessiert:
http://www.hackerboard.de/board.php?boardid=46

Tomo
10.08.2008, 01:24
Da ich im mom an totaler langweile fast eingehe hab ich mich entschieden doch mal Dr.Chaos aufgabe zu machen xD (jaja kommt aber früh wa^^)
Ich hab die letzten Tage bisschen aus C++ in 21 Tagen gelesen um die Unterschiede zu Konsolenprogrammen zu verstehen.
Da stand z.b. auch (nicht speziell für konsolenprogramme) dass wenn man eine Variable an eine Funktion per parameter weitergibt, diese lokal in der Funktion vorhanden ist. Aber in der Aufgabe soll z.b. tippen() keinen Wert zurückgeben. Wie kann die Funktion also den Array den man übergibt verändern, sodass dieser auch in anderen Funktionen verändert ist. (...des war jetz schwer zu schreiben :D )

Noob1233, hast du etwa aufgegeben?^^ Bist ja sonst noch aktiv im Forum...

Dr.ChAoS
10.08.2008, 12:38
Da sich jetzt ja schon mehrere an der Lösung des Lotto Programms versucht haben poste ich mal meine Lösung:
http://pastebin.com/f163e3f1c
Meiner Version läuft übrigens unter Linux und Windows^^
MfG
Dr.ChAoS

Tomo
10.08.2008, 13:19
Wäre nett, wenn du mir das trotzdem noch erklären könntest^^
Aus dem Quelltext allein versteh ich das leider nicht.

Added after 5 hours 1 minutes:

Also ich hab z.B. das hier:
http://pastebin.com/mc394f7e

Ausgabe:

1. Zahl: 0
2. Zahl: 1
3. Zahl: 2
4. Zahl: 3
5. Zahl: 4
6. Zahl: 5

1. Zahl: 9
2. Zahl: 9
3. Zahl: 9
4. Zahl: 9
5. Zahl: 9
6. Zahl: 9

Wieso funktioniert das? Laut "C++ in 21 Tagen" sollte das doch nicht funktionieren, oder? >.<

Edit: Alles klar, habe bereits eine Antwort: Man übergibt ja einen Zeiger und nicht den Array selbst^^