WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   C++ Noob braucht weiterhin Hilfe... (http://www.wcm.at/forum/showthread.php?t=113987)

Groovy 31.10.2003 19:00

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... :heul:

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... :(

Root 31.10.2003 19:34

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 :D. 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!

Root 31.10.2003 19:49

Sorry, hab jetzt ziemlich viel editiert da oben... wollte noch ein vollständiges Proggi draus machen, das Fieber hat mich wieder gepackt :D .
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

Groovy 31.10.2003 20:04

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. :rolleyes:

Root 31.10.2003 20:09

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

Groovy 31.10.2003 21:22

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. :D
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. :rolleyes:
Gibt's da einen Trick dafür?

Root 31.10.2003 21:46

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 :D .
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 :D ). 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...

Flink 31.10.2003 22:19

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;
  };

}


Groovy 31.10.2003 23:22

Ja es funktioniert :eek: , ich wünschte ich könnt genauso gut programmieren wie du. :heul:
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

Root 31.10.2003 23:31

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!='!');
}



Alle Zeitangaben in WEZ +2. Es ist jetzt 03:20 Uhr.

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