WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 31.10.2003, 19:00   #1
Groovy
Inventar
 
Registriert seit: 24.01.2001
Beiträge: 5.107


Unglücklich C++ Noob braucht weiterhin Hilfe...

Code:
#include <iostream.h>


int main()
{
char zeile[81], del;
    int i;
    
do{     
    cin>>zeile;
    cin>>del;
   
for(i=0; zeile[i]!='\0';i++)
            {
            del=zeile[i]-del;
                cout<<del;
            }
  }while (del!='!');
}
Also ich häng schon seit einem halben Tag an diesem Prog und weiss immer noch nicht wo meine Denkfehler liegen...

Es sollen irgendwelche Wörter eingegeben werden und bei der 2. Eingabe gibt man einen zu löschenden Buchstaben an, solange bis man ein Rufzeichen eingibt.
Also mit ! wird das Programm beendet.
z.B. Eingabe: abc, a
Ausgabe: bc
Eingabe: !
Programm beendet

Ich schätze ich hab da viel mist eingebaut und ich weiss auch nimmer weiter...
Groovy ist offline   Mit Zitat antworten
Alt 31.10.2003, 19:34   #2
Root
Inventar
 
Registriert seit: 19.12.2000
Ort: Baden
Alter: 48
Beiträge: 1.867


Standard

Entweder ich hab da was missverstanden oder das Proggi müsste ein wenig komplizierter aussehen - man kann doch nicht einfach einen Buchstaben von einem Buchstaben subtrahieren?! OK, von mir aus einen Char von einem Char aus einem Char-Array, in Programmierer-Jargon . Oder kenn ich da wieder ein paar Kniffe nicht? Und vor allem änderst Du ja die nach der Eingabe der Aufgabenstellung nach fixe Variable del (die sollte ja das ganze Proggi hindurch zB "a" sein).
Wenn ich das richtig verstanden habe, sollte ja zum Beispiel aus dem Wort "solltevielleicht" das Wort "sotevieeicht" werden, oder? In dem Fall bediene Dich doch eines Hilfsarrays und kopier die Chars mit einer Bedingung hinüber:

Code:
#include <iostream.h>

int main() {
   char zeile[81];
   char zeileFinal[81];
   char del;
   int i=0;
   int j=0;

   do{     
      cin>>zeile;
      cin>>del;

      while zeile[i]!='\0' {
         if zeile[i]!=del {
            zeileFinal[j]=zeile[i];
            j++;
          }
          i++;
      }
   }while del!='\0';

   for(j=0; j!='\0'; j++) {
      cout<<zeileFinal[j];
   }
}
Pfuhhh, is schon länger her, meine C++ Zeit, hoffe das paßt wenigstens einigermassen Die Syntax hab ich halt nimmer so intus, das solltest schon Du besser wissen

Viel Erfolg!
____________________________________

Signatur? Nervt ja nur!
Avatar? Wunderbar!
Root ist offline   Mit Zitat antworten
Alt 31.10.2003, 19:49   #3
Root
Inventar
 
Registriert seit: 19.12.2000
Ort: Baden
Alter: 48
Beiträge: 1.867


Standard

Sorry, hab jetzt ziemlich viel editiert da oben... wollte noch ein vollständiges Proggi draus machen, das Fieber hat mich wieder gepackt .
Hoffe es hilft Dir, habe zur Zeit keinen Compiler installiert also kann ich´s nicht ausprobieren, wiegesagt is lang her. Post dann mal, ob Du was damit anfangen konntest.

LG
____________________________________

Signatur? Nervt ja nur!
Avatar? Wunderbar!
Root ist offline   Mit Zitat antworten
Alt 31.10.2003, 20:04   #4
Groovy
Inventar
 
Registriert seit: 24.01.2001
Beiträge: 5.107


Standard

Zitat:
Original geschrieben von Root
[b] sollte ja zum Beispiel aus dem Wort "solltevielleicht" das Wort "sotevieeicht" werden, oder?
Ja, so hab ichs gemeint.

Vielen Dank für deinen Lösungsvorschlag!
Ich werds mal anschauen.

Naja aber ich solls selber lösen können.
Groovy ist offline   Mit Zitat antworten
Alt 31.10.2003, 20:09   #5
Root
Inventar
 
Registriert seit: 19.12.2000
Ort: Baden
Alter: 48
Beiträge: 1.867


Standard

Noch kann ich´s editieren, soll ich´s löschen?
Naja, ein paar von diesen Sachen muss man mal fertig sehen damit man ein Gefühl für die grundlegenden Techniken bekommt, ist nicht weiter schlimm. Viel Spass und meld Dich noch wenn Du die Lösung hast

LG
____________________________________

Signatur? Nervt ja nur!
Avatar? Wunderbar!
Root ist offline   Mit Zitat antworten
Alt 31.10.2003, 21:22   #6
Groovy
Inventar
 
Registriert seit: 24.01.2001
Beiträge: 5.107


Standard

Hab mal das Programm angeschaut, es waren nur ein paar klitzekleine Fehler (bei if und while runde Klammern) sonst syntaktisch korrekt, aber bei der Ausführung kommt keine Lösung raus und die CPU steigt auf 100% Last.
Vielleicht find ich den Fehler wer weiss?

Hmm, ich weiss zwar wie die Schleifen funktionieren aber wie kommt man solche sachen? Wann man sie einsetzt weiss ich auch nicht so genau...bei Fakultät oder Summe ist es zwar logisch aber sonst nicht.

Für den Anfänger sehen die Schleifen auf dem ersten Blick verwirrend aus, besonders die verschachtelten...

Es ist als ob man ein Rad neu erfinden würde und dafür brauch ich eine Ewigkeit.
Gibt's da einen Trick dafür?
Groovy ist offline   Mit Zitat antworten
Alt 31.10.2003, 21:46   #7
Root
Inventar
 
Registriert seit: 19.12.2000
Ort: Baden
Alter: 48
Beiträge: 1.867


Standard

Hmmm... Trick fällt mir da keiner ein. Aber ich bin halt auch der Typ der sich wenn´s sein muss stundenlang das Hirn zermartert bis er einen kleinen Schritt verstanden hat, und irgendwann kommt dann halt ein kleiner Schritt auf den anderen und dann sitzt´s. Wenn man bedenkt dass das ganze schon 5 Jahre her ist bei mir ist doch noch was hängengeblieben denk ich.
Sogesehen bist Du eh am richtigen Weg . Ansonsten einfach nur überlegen was Schritt für Schritt mit den Variablen passiert und wie Du das umgehen kannst, was falsch ist - weil auf das was funzt kommt man eh nicht direkt .
Schleifen sind halt die einfachste (womöglich atomare?) Möglichkeit, mehrere zusammenhängende Elemente zu traversieren => bearbeiten, ausser über einen eindeutigen Indexzugriff oder dergleichen. Der ist aber unpraktisch für mehrere Elemente, deswegen schaust Du einfach bei jedem Element mittels Bedingungen nach ob man bei dem was machen muss oder nicht. Mehr isses nicht. Dann noch von innen nach aussen schaun, welche Befehle Du wo ausführen lässt. In meinem Beispiel das j++ : das steht in der if-Bedingung innerhalb der Schleife, wird also nur erhöht wenn der aktuelle Buchstabe!=del ist. Ein klassischer Fehler wäre, das j++ gleich wie i++ nach der if Bedingung zu schreiben (hätt ich fast wieder gemacht ). Hmmm, ich hoffe ich gehe Dir nicht am Zeiger hier, will Dich nur ermutigen, weil ich mich leider zu oft (unnötig) entmutigen habe lassen bzw. selbst entm. habe Ich schau noch, ob ich den Fehler finde...
____________________________________

Signatur? Nervt ja nur!
Avatar? Wunderbar!
Root ist offline   Mit Zitat antworten
Alt 31.10.2003, 22:19   #8
Flink
Hero
 
Registriert seit: 29.08.2001
Alter: 57
Beiträge: 904


Flink eine Nachricht über ICQ schicken Flink eine Nachricht über Skype™ schicken
Standard

Code:
#include <iostream.h>

int main() {
   char zeile[81];
   char zeileFinal[81];
   char del;
   int i;
   int j;

   cin>>zeile;

   while (zeile[0]!='!') 
   {     
      cin>>del;
      for (i=0, j=0; zeile[i]!='\0'; ++i)
      {
         if zeile[i]!=del {
            zeileFinal[j]=zeile[i];
            j++;
          }
      }
      zeileFinal[j] = '\0';
      cout<<zeileFinal;
      cin>>zeile;
   };

}
____________________________________
Bibel
Flink ist offline   Mit Zitat antworten
Alt 31.10.2003, 23:22   #9
Groovy
Inventar
 
Registriert seit: 24.01.2001
Beiträge: 5.107


Standard

Ja es funktioniert , ich wünschte ich könnt genauso gut programmieren wie du.
Danke für deinen Post!

Aber was mich wundert ist die If Anweisung ohne else, wieso geht das trotzdem?
...oder verlangt das if nicht unbedingt einen else...ach jetzt hab ich auch noch probs mit der If-Klausel
Groovy ist offline   Mit Zitat antworten
Alt 31.10.2003, 23:31   #10
Root
Inventar
 
Registriert seit: 19.12.2000
Ort: Baden
Alter: 48
Beiträge: 1.867


Standard

So, hab´s jetzt auch hinbekommen. Hier meine Lösung:
Code:
#include <iostream.h>

int main(void) {
    char zeile[81];
    char zeileFinal[81];
    char del;
    int i;
    int j;

    do{     
        i=0;
        j=0;
        cin >> zeile;
        cin >> del;

        while (zeile[i]!='\0') {
                if (zeile[i]!=del) {
                    zeileFinal[j]=zeile[i];
                    j++;
                }
                i++;
        }

        cout << zeileFinal;
        
    } while (del!='!');
}
____________________________________

Signatur? Nervt ja nur!
Avatar? Wunderbar!
Root ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:09 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag