Zum Inhalt springen

Psycho~zicke

Mitglieder
  • Gesamte Inhalte

    84
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von Psycho~zicke

  1. Guten morgen, ich bin was VBA Programmieren angeht die absolute Anfängerin. Nun hab ich eine Aufgabe bekommen, wo in Tabelle1 Daten stehen und ich den Kundennamen auslesen soll und in Tabelle2 schreiben soll. Leider bin ich grad ein bissel ahnungslos wie das Funkionieren soll. Habe damit angefangen aber komm nicht weiter. Sub Daten_Verschieben() 'Zuordnung der Variablen Dim Zelle As Variant 'Zuordnung der Tabellenblätter Sheets("Tabelle1").Cells(3, 4).Value Sheets("Summe").Cells(2, 1).Value While Sheets("Tabelle1").AktiveCell.Value <> "" While Sheets("Summe").AktiveCell.Value = "" Summe.Cells = Tabelle1.Cells Wend Wend End Sub Wollte mal fragen ob man den Anfang so lassen kann und evt hat ja jemand einen Tip wie ich weiter machen muss. Danke schon mal im Vorraus Liebe Grüße die Zicke
  2. Super jetzt Funktioniert es wie es soll )) danke
  3. Super nun funktioniert es )) Habe aber trotzdem noch mal ne frage und zwar bekomme ich den ersten Datensatz (nach neuer reihenfolge) und den letzten Datensatz (nach alterreihenfolge doppelt ausgegeben. Woran kann das liegen?? Kann es leider nicht feststellen. Danke schon mal im Vorraus. #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 15 #define MAXCHAR 50 #define True 1 #define False 0 int Vergleich(const void *s1, const void *s2); void main() { /* Deklaration FILE-Zeiger */ FILE *fQuelle; FILE *fZiel; /* Daclaration der Variablen */ char *sZeile2[MAX]; char sZeile[MAXCHAR]; int iZaehler; int iSortier; int iTausch; int Pos; int i; Pos = 0; iTausch = 0; /* öffnen der Datei */ fQuelle = fopen("C:\\Kernig~1\\Lookup\\1-1-1.c","r"); fZiel = fopen ("C:\\Kernig~1\\Lookup\\test.c", "w+"); /* Überprüfung ob die Datei geöffnet werden kann */ if (fQuelle == NULL) { printf("Fehler beim Oeffnen der Datei C:\\Kernig~1\\Lookup\\1-1-1.c\n"); } for (iZaehler = 0;iZaehler < MAX ; iZaehler++) { /* Einlesen der aktuellen Zeile aus fQuelle */ fgets(sZeile, MAXCHAR, fQuelle); /* entfernen des \n */ sZeile[strlen(sZeile)-1] = 0; /* malloc macht einen Zeiger auf einen freien platz der sZeile +1 länge hat und übergibt den Zeiger an sZeile2[iZaehler] */ sZeile2[iZaehler] = malloc(strlen(sZeile)+1); /* Kopie wird von sZeile an sZeile2[iZaehler] gemacht */ strcpy(sZeile2[iZaehler], sZeile); } for (i = 1; i < MAX; i++) { for(iZaehler = 0; iZaehler < MAX - i; iZaehler++) { if (strcmp(sZeile2[iZaehler+1], sZeile2[iZaehler]) <0) { sZeile2[iTausch] = sZeile2[iZaehler]; sZeile2[iZaehler] = sZeile2[iZaehler+1]; sZeile2[iZaehler+1] = sZeile2[iTausch]; } } } for (iZaehler = 0; iZaehler < MAX; iZaehler++) { /* if abfrage damit nur einma die Tabellen überschriften erscheinen */ if (Pos == 0) { printf("\nName\t Nachname\t Alter\n"); ++Pos; } /* Ausgabe der Datensätze bzw inhalte der Einzelnen Zeiger */ printf("\n%s", sZeile2[iZaehler]); fputs (sZeile2[iZaehler],fZiel); } } int Vergleich(const void *s1, const void *s2) { return (strcmp(*(char **)s1, *(char **)s2)); }
  4. Ja genau ich möchte die Inhalte sortieren nicht die Zeigeradressen. So ein mist. Dann schau ich mal wie man das mit strcmp macht. danke
  5. Hallo ihr lieben, ich habe folgendes Problem. Ich soll ein programm schreiben das Daten aus einer Tabelle einliest die Tabelle dann ordnet und in eine andere Datei ausgibt. Bis auf das ordnen klappt auch alles wunderbar. Vllt wisst ihr ja wo mein fehler ist. #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 15 #define MAXCHAR 50 #define True 1 #define False 0 void main() { /* Deklaration FILE-Zeiger */ FILE *fQuelle; FILE *fZiel; /* Daclaration der Variablen */ char *sZeile2[MAX]; char sZeile[MAXCHAR]; int iZaehler; int iSortier; int iTausch; int Pos; int i; Pos = 0; iTausch = 0; /* öffnen der Datei */ fQuelle = fopen("C:\\Kernig~1\\Lookup\\1-1-1.c","r"); fZiel = fopen ("C:\\Kernig~1\\Lookup\\test.c", "w+"); /* Überprüfung ob die Datei geöffnet werden kann */ if (fQuelle == NULL) { printf("Fehler beim Oeffnen der Datei C:\\Kernig~1\\Lookup\\1-1-1.c\n"); } for (iZaehler = 0;iZaehler < MAX ; iZaehler++) { /* Einlesen der aktuellen Zeile aus fQuelle */ fgets(sZeile, MAXCHAR, fQuelle); /* entfernen des \n */ sZeile[strlen(sZeile)-1] = 0; /* malloc macht einen Zeiger auf einen freien platz der sZeile +1 länge hat und übergibt den Zeiger an sZeile2[iZaehler] */ sZeile2[iZaehler] = malloc(strlen(sZeile)+1); /* Kopie wird von sZeile an sZeile2[iZaehler] gemacht */ strcpy(sZeile2[iZaehler], sZeile); } for (i = 1; i < MAX; i++) { iSortier = 0; for(iZaehler = 0; iZaehler < MAX - i; iZaehler++) { if(sZeile2[iZaehler+1] < sZeile2[iZaehler]) { iTausch = sZeile2[iZaehler]; sZeile2[iZaehler] = sZeile2[iZaehler+1]; sZeile2[iZaehler+1] = iTausch; iSortier = 1; } } if(!iSortier) { break; } } for (iZaehler = 0; iZaehler < MAX; iZaehler++) { /* if abfrage damit nur einma die Tabellen überschriften erscheinen */ if (Pos == 0) { printf("\nName\t Nachname\t Alter\n"); ++Pos; } /* Ausgabe der Datensätze bzw inhalte der Einzelnen Zeiger */ printf("\n%s", sZeile2[iZaehler]); fputs (sZeile2[iZaehler],fZiel); } } Danke schon mal im Vorraus. Liebe Grüße die Zicke
  6. Ja genau das ist eine vergleichsfunktion für qsort. ahh ok. Danke nun habe ich es verstanden.
  7. Hallo, ich schreibe gerade ein Programm das Aus einer Datei eine Tabelle einliest. Danach soll die Tabelle in Richtiger reihenfolge sortiert werden. Das funktioniert auch alles bestens. Ich habe da eine Funktion die 2 Strings mit einander Vergleicht und genau da liegt mein Problem. int Vergleich(const void *s1, const void *s2) { return (strcmp(*(char **)s1, *(char **)s2)); } Mir wurde gesagt das das nur so funktioniert. Allerdings verstehe ich nicht wieso ich so viele Zeiger brauche. Vllt kann es mir ja jemand erklären. Wäre lieb. Liebe Grüße
  8. Ohh ok... Kann mir da jetzt grade im moment nicht vorstellen wie das gehen soll... Werde es mir aber mal durch den Kopf gehen lassen.
  9. @ Bubble Danke für die anwort. Ich weiß die Kommentare sind auch nicht grad die besten. Vervollständige sie normalerweise wenn ich das Programm fertig habe und es richtig läuft. Das jetzt sind mehr oder weniger nur anhaltspunkte für mich. Man kann den Inhalt von "sZeile" ohne hilfsarry umdrehen. Oh ok das wusste ich nicht. Bin davon ausgegangen das es nur so geht. Ja genau so hatte ich es eigentlich gedacht, das nach dem Funktionsaufruf in dem aufgerufenen Array die umgekehrte Zeichenkette steht.
  10. Bin ja grad dabei es zu lernen und zu verstehen. Ich werd das morgen gleich mal versuchen... Ich danke dir schon mal für deine hilfe...
  11. ok dann versuch ich das mal so wie du vorgeschlagen hattest... Bei der Übergabe bleibt es aber gleich oder?
  12. war eigentlich der Meinung das ich das & nur bei der übergabe an die Parameter benutzen kann. Arbeite das erste ma mit Zeigern und habe das Prinziep wohl noch nicht wirklich verstanden. Aber ich werde es mal versuchen.
  13. Hallo, ich hab da ma nen kleines Problem. Ich hoffe zumindest das es ein kleines ist. Ich soll ein Programm schreiben und aussenliegende Funktionen dafür benutzen. Das hat auch sehr gut geklappt. Leider funktioniert der letzte teil mit den Zeigern nicht so wie es soll... Kann mir vllt jemand weiter helfen?? Es kommt keine Fehlermeldung aber ich bekomme den Hexadezimalen wert nicht umgekehrt. Ich schreib ich mal meinen Quellcode und die aufgaben beschreibung dazu. Vllt weiß ja jemand woran es liegt... Das Fettmakierte ist mein Problemkind... Danke schon ma für die hilfe... *Schreiben Sie ein Programm das nach eingabe des Wertes und der gewünschten Basis die Zahl umrechnet und ausgibt. * *Programm in einzelnen Funktionen schreiben und Zeiger verwenden. **********************************************************/ #include <string.h> #include <ctype.h> #include <stdio.h> #include <math.h> #include <stdlib.h> #define MAXCHAR 30 /* Meldungen an den Kunden und einlesen seiner antworten */ int iMeldung (int iEingabe, int iPos) { if (iPos == 0) { printf ("Bitte geben sie Ihre ganze Zahl ein\n\n"); scanf ("%d",&iEingabe); return iEingabe; } else { printf ("Bitte geben sie die gewünschte Basis an\n\n"); scanf ("%d", &iEingabe); return iEingabe; } } /* Berechnung der GanzenZahl in das gewünschte Zahlensystem mit ergebniss die ganze zahl die bliebt */ int iBerechnungGanzeZahl (int iEingabeZahl, int iBasisZahl) { int iGanzeZahl; iGanzeZahl = 0; iGanzeZahl = iEingabeZahl / iBasisZahl; return iGanzeZahl; } /* Berechnung der Ganzen Zahl in das gewünschte Zahlensystem mit ergebniss der rest der bleibt */ int iBerechnungRest (int iEingabeZahl, int iBasisZahl) { int iRest; iRest = 0; iRest = iEingabeZahl % iBasisZahl; return iRest; } /* Umrechnung von iRest in den Zahlenwert */ int iUmrechnungiRest (int iRest) { int iRestNeu; iRestNeu = 0; if (iRest >= 0 && iRest <= 9 ) { /* iRest % 10 +'0' = iRest wird umgewandelt auf Basis 10 also einem Zahlenwert + 0 Positionen in der Asci Tabelle. Ohne diese umwandlung bekommt man das Zeichen ausgegeben das an der Stelle der Asci Tabelle steht den wir als rest haben und nicht den Zahlenwert den iRest hat. */ iRestNeu = iRest % 10 +'0'; } return iRestNeu; } /* Umwandlung der Hexadezimalzahlen in Buchstaben falls iRest größer wie 9 sein sollte */ void sRestGroesserZehn (char *cBuchstabe, int iBasisZahl, int iRest) { if (iBasisZahl > 10) { switch (iRest) { case (10): { *cBuchstabe = 'A'; } break; case (11): { *cBuchstabe = 'B'; } break; case (12): { *cBuchstabe = 'C'; } break; case (13): { *cBuchstabe = 'D'; } break; case (14): { *cBuchstabe = 'E'; } break; case (15): { *cBuchstabe = 'F'; } break; } } } [B] void Umkehr (char *sZeile, int iEingabeZaehler) { char *sKehrZeile[MAXCHAR]; int iKehrEingabe; iKehrEingabe = 0; /* Übergabe der Zeichenkette sZeile an sKehrZeile. die Zeichenkette sZEile wird von hinten nach vorne an sKehrZeile übergeben so das das letzte Zeichen bei sKehrZeile als erstes Zeichen steht... */ while (iEingabeZaehler > 0) { --iEingabeZaehler; *sKehrZeile[iKehrEingabe] = sZeile[iEingabeZaehler]; ++iKehrEingabe; }[/B] } /* Beginn des Hauptprogramms */ void main () { char sZeile[MAXCHAR]; int iEingabeZaehler; int iEingabe; int iBasis; int iGanzeZahl; int iRest; int iUmrechnungRest; char cBuchstabe; int iPos; cBuchstabe = 'y'; iEingabeZaehler = 0; iUmrechnungRest = 0; iEingabe = 0; iBasis = 0; iGanzeZahl = -1; iRest = 0; iPos = 0; while (iBasis == 0) { /* Meldung an den Kunden welche Zahl er umgerechnet haben möchte und zu welcher Basis. */ iEingabe = iMeldung(iEingabe, iPos); ++iPos; iBasis = iMeldung(iBasis, iPos); if (iBasis > 16 || iBasis == 0) { printf ("Zahlen mit einer Basis höher 16 oder Basis 0 können nicht berechnet werden!!!\n\n"); iBasis = 0; } iPos = 0; } /* Berechnung der Ganzen Zahl in das gewünschte Zahlensystem */ while ( iGanzeZahl != 0) { /* Übergabe der errechneten Ganzenzahl an iGanzeZahl. &iZahl übergibt ihre Adresse an iZahl in der Funktion. Somit haben beide den selben inhalt und adresse. Es ist aber nur eine Kopie der adresse. */ iGanzeZahl = iBerechnungGanzeZahl (iEingabe, iBasis); /* Übergabe des errechneten restes an iRest. */ iRest = iBerechnungRest (iEingabe, iBasis); /* Falls Die Basis 1 ist */ if (iBasis == 1) { iRest = 0; iGanzeZahl = 0; } if (iRest <= 9) { /* Übergabe des errechnetenwertes an iUmrechnungRest */ iUmrechnungRest = iUmrechnungiRest(iRest); sZeile[iEingabeZaehler] = iUmrechnungRest; ++iEingabeZaehler; } /* Übergabe des errechnetenwertes (Heximalzahl größer 10) an iRestGroesserZehn. */ sRestGroesserZehn(&cBuchstabe, iBasis, iRest); if (cBuchstabe != 'y') { sZeile[iEingabeZaehler] = cBuchstabe; ++iEingabeZaehler; } /* Übergabe der Werte und Zähler zurücksetzen */ iEingabe = iGanzeZahl; cBuchstabe = 'y'; iRest = 0; } /* Zusammenführung der Einzelnen werte zu einer Zeichenkette */ sZeile[iEingabeZaehler] = '\0'; [B]Umkehr(&sZeile, iEingabeZaehler);[/B] /* Ausgabe der Umgewandelten Zahl */ printf ("Umgewandelte Zahl: %s\n\n", sZeile); }
  14. Guybrush Threepwood: das Porblem ist ja das keiner den ich kenne eine Vista cd hat. Alle hatten es vorinstalliert und dann sind ja keine mehr dabei... Den Key hab ich unten am Notebook stehen hab ich grad gesehen... Chief Wiggum: Ja da kommt keine Fehlermeldung sonst wüsste ich ja was das problem ist. er übernimmt den einfach nicht. Ja habe auch die von samsung probiert aber auch da wird es installiert aber auch nicht übernommen bzw angezeigt.
  15. Ich habe das Notebook samsung R40 plus. Der Grafikkartentreiber lässt sich nicht installieren. Ich habe bereits alle Treiber versucht die ich finden konnte. Die maus funktioniert auch nicht richtig. Das Scrollen geht seiten verkehrt, scrollt man nach oben geht das bild nach unten aber auch nur ruckhaft und scrollt man nach unten geht das bild nach oben genauso ruckhaft. Bei der Recovery CD habe ich nur die auswahl die Festplatte zu kopieren oder windows normal zu starten.
  16. hmm das problem is das ich xp auf das notebook gemacht habe, aber nicht alle treiber finden kann und deshalb wieder vista drauf machen möchte. hatte so ne recovery cd gemacht aber irgendwie geht das nicht...
  17. Hallöchen!!! Ich hab da mal ne frage und zwar hab ich mir nen notebook gekauft und da ist vista drauf. Nun war dort keine Vista cd dabei. Weiß zufällig jemand wie ich mir so eine cd erstellen kann? Also ich kenne es nur so das ne Betriebssystem cd dabei ist falls mal was ist das man ihn neu aufsetzen kann. Ich hoffe hier kann mir jemand helfen. Danke schon mal im Vorraus. Die Zicke
  18. das problem daran is nur das ich nur die funktionen nehmen darf die ich schon kenne... bin im ersten kapitel von Programmieren in C... also arg viele kenn ich noch nicht... Soll das mit while und if usw machen...
  19. Hallöchen Leute... Ich hab mal wieder ein Problem und hoffe das ihr mir ein wenig weiter helfen könnt... Also ich soll ein Programm schreiben das eine vorhandene Datei öffnet und diese dann in einer anderen Datei die man in dem Programm erzeugt abspeichert... Das ganze soll Zeilenweise passieren. Diesen Teil des Programms hab ich auch bestens hin bekommen. Was mir absolute probleme macht ist das die Kommentare beim auslesen der vorhanden Datei gelöscht werden sollen und dann die Datei Speichern der neuen Datei... Das schwierige für mich is halt auch das er jede art von kommentaren finden soll... welche die mit // beginnen und somit nur eine Zeile lang sind, aber auch /*kommentar*/ diese art die sich über mehrere Zeilen ziehen kann... ich schreib euch ma den quellcode und evt kann mir ja jemand weiter helfen... Bin für jede hilfe dankbar... /******************************************************* * Created from : Sabrina Werner * Created at : 23.01.2008 * Updated at : 24.01.2008 * * Description : Kapitel 1, Aufgabe von Stephan * *Schreiben Sie ein Programm, das C- Programmen kopiert und unter *einem anderen namen speichert. Es soll im anschluss die kommentare entfernen. * ********************************************************/ #include <stdio.h> int main (void) { /* Deklaration FILE-Zeiger */ FILE *fQuelle; FILE *fZiel; /* Deklaration der Variablen */ int iZaehler; char sZeile[80]; char sAusgabe[80]; int iPos; int iAusgabenZaehler; /* Zuordnung der Werte */ iZaehler = 0; iPos = 0; iAusgabenZaehler = 0; /* öffnen der Datei */ fQuelle = fopen("C:\\Kernig~1\\Lookup\\test.c", "r"); fZiel = fopen("C:\\Kernig~1\\Lookup\\Ziel.c", "w"); /* Überprüfung ob die Datei geöffnet werden kann */ if (fQuelle == NULL) { printf("Fehler beim Oeffnen der Datei C:\\Kernig~1\\Lookup\\test.c\n"); } else { printf("Datei erfolgreich geoeffnet.\n"); } /* Überprüfung ob die neue Datei erstellt werden konnte */ if (fZiel == NULL) { printf ("Fehler beim Oeffnen der Datei C:\\Kernig~1\\Lookup\\Ziel.c\n"); } else { printf ("Datei erfolgreich geoeffnet\n"); } /* Durchlaufen der Schleife bis die Datei zu ende ist. Übergabe der Daten aus fQuelle nach fZeile... */ while(fgets(sZeile, 80, fQuelle) != NULL) { /* Finden der Kommentare */ while (sZeile[iZaehler] != '\n') { if (sZeile[iZaehler] == '/' || sZeile[iZaehler] == '*') { ++iZaehler; if (sZeile[iZaehler] == '*' || sZeile[iZaehler] == '/') { iPos = iZaehler -1; } } /* Weg lassen de Kommentare */ if (sZeile[iZaehler] != '/' || sZeile[iZaehler] != '*') { sAusgabe[iAusgabenZaehler] = sZeile[iZaehler]; ++iAusgabenZaehler; ++iZaehler; } } /* Ausgabe der Zeichenkette in der gewünschten Datei */ fputs (sZeile, fZiel); iZaehler = 0; } /* Schließung der Dateien */ fclose(fQuelle); fclose (fZiel); return 0; }
  20. Hallöchen!!! Ich hab mal wieder ein Problem und hoffe das ihr mir helfen könnt... Ich habe ein Programm das mir in einem satz wörter ersetzen soll. Ich hab das soweit auch geschrieben nur fehlt mir leider der Teil wo ich das ersetzende Wort an die stelle des alten wortes setzte. Hab nen absoluten Blackout. Komm einfach nciht drauf wie es gehen könnte... Leider hab ic morgen auch abgabe termin... Ich hoffe das ihr mir auf die Sprünge helfen könnt... Hier mal den Quellcode... #include <stdio.h> #include <string.h> #define MAXLINE 40 void main () { // deklaration der Variablen int iEingabe; char sZeile [50]; char sSuchWort[50]; char sNeuesWort [50]; char sNeueZeile [50]; int iZaehler; int iSpalte; int iLeerPos; int iZurueck; int iSuchWortZaehler; int iAnzahlZeichenZeile; int iPosErstesZeichenSuchWort; int iAnzahlSuchWort; int iNeuesWortZaehler; int iAnzahlNeuesWort; int iNeueAnzahlZeichen; // Zuordnung der Werte iEingabe = 'w'; iZaehler = 0; iSpalte = 0; iLeerPos = 0; iZurueck = 0; iSuchWortZaehler = 0; iAnzahlZeichenZeile = 0; iPosErstesZeichenSuchWort = -1; iAnzahlSuchWort = 0; iNeuesWortZaehler = 0; iAnzahlNeuesWort = 0; iNeueAnzahlZeichen = 0; /* Eingabe des ganzen Satzes */ printf("\nBitte geben Sie einen Satz ein\n"); scanf ("%d", iEingabe); /* Die Eingabe im Array speichern und Automatischer Zeilenumbruch */ while (iEingabe !='\n') // Wird ausgeführt solange iEingabe nicht A ist { iEingabe = getchar(); // Übergabe der Werte an iEingabe sZeile [iZaehler] = iEingabe; // Übergabe der Werte an sZeile if (iEingabe == ' ') { iLeerPos = iZaehler; // iLeerPos bekommt den Wert von iZaehler und behält ihn so lange bis iZaehler wieder ein Leerzeichen ist. } if (iSpalte >= MAXLINE) { sZeile[iLeerPos] = '\n'; iSpalte = -1; // iSpalte bekommt den wert -1 damit iSpalte nach dem Zeilentrenner wieder bei 0 beginnt. -1 Weil iSpalte gleich unten drunter wieder um 1 hochgezählt wird. } ++ iZaehler; ++ iSpalte; } sZeile[iZaehler] = '\0'; // ende der Zeichenkette iAnzahlZeichenZeile = iZaehler; // Übergabe der Anzahl der vorhanden Zeichen im Array /* Eingabe des zu ersetzendes Wortes entgegennehmen */ iEingabe = 0; //sichern ist sichern, auf jeden Fall kein vordefinierter Wert printf ("\nWelches Wort wollen Sie ersetzen?\n"); scanf("%d", iEingabe); /* Abgreifen und Speichern des zu ersetzenden Wortes */ while (iEingabe != '\n') { iEingabe = getchar(); // Übergabe der Werte an iEingabe sSuchWort [iSuchWortZaehler] = iEingabe; // Übergabe der Werte an sSuchWort ++iSuchWortZaehler; sSuchWort[iSuchWortZaehler] = '\0'; } iAnzahlSuchWort = iSuchWortZaehler; // Wertübergabe von der länge des Suchworts --iAnzahlSuchWort; /* Suche nach dem ersetzenden Wort */ iZaehler = 0; //Sicher sein das wir am Anfang der Zeichenkette beginnen iSuchWortZaehler = 0; // Sichern das iSuchWortZaehler am Anfang der Zeichenkette beginnt while ( iZaehler < iAnzahlZeichenZeile) { if (sZeile [iZaehler] == sSuchWort[iSuchWortZaehler]) { /* Speicher die Position des ersten Buchstabens meines zu ersetzenden wortes wenn der erste Buchstabe meines zu suchenden Wortes in meinem satz gefunden wurde */ if (iSuchWortZaehler == 0) { iPosErstesZeichenSuchWort = iZaehler; } /* Das zu ersetzende Wort wurde gefunden */ ++iSuchWortZaehler; if (iSuchWortZaehler == iAnzahlSuchWort) // trifft nur ein wenn das zu ersetzende Wort gefunden wurde { printf ("\nIhr Wort wurde gefunden\n"); break; } } else { // Es wurde nicht das ganze zu suchende Wort gefunden und wird darum auf die ausgangspositionen zurückgesetzt iSuchWortZaehler = 0; iPosErstesZeichenSuchWort = -1; } ++iZaehler; } /* Das ersetzende wort eingeben wenn das wort gefunden wurde */ // iSuchWortZaehler kann nur dann mit iAnzahlSuchWort übereinstimmen wenn das zu ersetzende Wort gefunden wurde if (iSuchWortZaehler != iAnzahlSuchWort) { printf ("\n Ihr Wort wurde nicht gefunden\n"); } else { //sichern ist sichern, auf jeden Fall kein vordefinierter Wert iEingabe = 0; // Entgegen nehmen der Eingabe printf ("\nDurch welches Wort wollen Sie ersetzen?\n"); scanf("%d", iEingabe); // Abgreifen und Speichern der Eingabe while (iEingabe != '\n') { iEingabe = getchar(); // Übergabe der Werte an iEingabe sNeuesWort [iNeuesWortZaehler] = iEingabe; // Übergabe der Werte an sNeuesWort ++iNeuesWortZaehler; sNeuesWort[iNeuesWortZaehler] = '\0'; } iAnzahlNeuesWort = iNeuesWortZaehler; // Wertübergabe von der länge des zu ersetzenden worts --iAnzahlNeuesWort; /* Berechnung der Längenunterschiede */ if (iAnzahlSuchWort > iAnzahlNeuesWort ) { iZurueck = iAnzahlNeuesWort - iAnzahlSuchWort; } if (iAnzahlSuchWort < iAnzahlNeuesWort) { iZurueck = iAnzahlNeuesWort - iAnzahlSuchWort; } /* Verschiebung der Letzen Positionen solange bis die Position des ersten Zeichens vom SuchWort erreicht ist */ iNeueAnzahlZeichen = iAnzahlZeichenZeile; while (iAnzahlZeichenZeile != iPosErstesZeichenSuchWort) { // Übergabe des errechneten Wertes um die fehlenden Zeichen in meiner Kette zu überbrücken sZeile[iAnzahlZeichenZeile +iZurueck] = sZeile[iAnzahlZeichenZeile]; -- iAnzahlZeichenZeile; } iSuchWortZaehler = 0; iNeuesWortZaehler = 0; /* Ersetzung des Wortes */ } } /* Ausgabe der Zeichenkette */ printf ("\n%s\n", sZeile); } Danke schonmal im vorraus...
  21. Hab das Problem heute Lösen können. Danke für eure Hilfe... Hätte da noch ne frage uns zwar würde ich gern sowas wie ne abfrage/eingabeaufforderung in das Programm bauen... Also quasi "Bitte geben sie den Satz ein. Welches Wort wollen sie ersetzen. Durch welches Wort wollen sie es ersetzen? Und das dann erst der Satz ausgegeben wird... Hab versucht dies in meinen Quelltext einzubauen aber bis auf die erste frage klappts leider nicht... Wahrscheinlich hab ich die befehle an der Falschen stelle oder so... Wäre lieb wenn mir jemand nen Tip geben könnte... Danke schon mal im vorraus... #include <stdio.h> #include <string.h> #define MAXLINE 40 void main () { // deklaration der Variablen int iEingabe; char sZeile [70]; int iZaehler; int iSpalte; int iLeerPos; int iSchleife; int iPos; int iZurueck; // Zuordnung der Werte iEingabe = 'w'; iZaehler = 0; iSpalte = 0; iLeerPos = 0; iSchleife = 0; iPos = 0; printf("\nBitte geben Sie einen Satz ein\n"); while (iEingabe !='A') // Wird ausgeführt solange iEingabe nicht A ist { iEingabe = getchar(); // Übergabe der Werte an iEingabe sZeile [iZaehler] = iEingabe; // Übergabe der Werte an sZeile if (iEingabe == ' ') //Überprüfung ob iEingabe ein Leerzeichen ist { iLeerPos = iZaehler; // iLeerPos bekommt den Wert von iZaehler und behält ihn so lange bis iZaehler wieder ein Leerzeichen ist. } if (iSpalte >= MAXLINE) // Überprüfung ob iSpalte größer/gleich MAXLINE ist { sZeile[iLeerPos] = '\n'; // sZeile gibt ein zeilentrenner aus wenn iSpalte größer/gleich MAXLINE ist iSpalte = -1; // iSpalte bekommt den wert -1 damit iSpalte nach dem Zeilentrenner wieder bei 0 beginnt. -1 Weil iSpalte gleich unten drunter wieder um 1 hochgezählt wird. } ++ iZaehler; // iZaehler wird hochgezählt ++ iSpalte; // iSpalte wird hochgezählt } sZeile[iZaehler] = '\0'; //sZeile setz \0 ans ende der Zeichenkette printf ("\nWelches Wort wollen Sie ersetzen?\n"); while (iSchleife < iZaehler) // Wird solange ausgeführt wie iSchleife < iZaehler ist { if (sZeile[iSchleife] == 'd') // Prüft auf welcher Position ein d ist { iPos = iSchleife; //übergabt der Position des d´s an iPos ++iSchleife; // iSchleife wird hochgezählt if (sZeile[iSchleife] == 'i') // Prüft ob der nächste buchstabe ein i ist { ++iSchleife; // iSchleife wird hochgezählt if (sZeile[iSchleife] == 'r') // Prüft ob der nächste buchstaben ein r ist { printf ("Durch welches Wort wollen Sie ersetzen?\n"); iZurueck = iZaehler; // Über gabe der letzten Position des strings an iZurueck while (iZurueck != iPos) //wird solange ausgeführt wie iZurueck nicht den selben Wert wie iPos hat { sZeile[iZurueck +2] = sZeile[iZurueck]; // Übergabe des Wertes +2 um die 2 Fehlenden Zeichen zu überbrücken -- iZurueck; // iZurueck wird runter gezählt } sZeile[iPos] = 'i'; // an aktuelle Position von iPos kommt ein i ++iPos; // iPos wird dochgezählt sZeile[iPos] = 'h'; // an aktuelle Position von iPos kommt ein h ++iPos; // iPos wird hochgezählt sZeile[iPos] = 'n'; // an aktuelle Position von iPos kommt ein n ++iPos; // iPos wird hochgezählt sZeile[iPos] = 'e'; // an aktuelle Position von iPos kommt ein e ++iPos; // iPos wird hochgezählt sZeile[iPos] = 'n'; // an aktuelle Position von iPos kommt ein n } } } ++iSchleife; // Zählt iSchleife hoch } printf ("%s", sZeile); // gibt die Zeichenkette sZeile aus }
  22. Hallöchen ihr lieben! Ich hab mal wieder ein Problem und hoffe das ihr mir helfen könnt. Ich habe ein Programm geschrieben und möchte in einem satz zb dir durch ihnen ersetzen... Ihnen ist aber länger wie dir und genau da kommt mein Problem. Ich überschreibe mir dann die ersten beiden Buchstaben des nächsten wortes. Ich hab mir gedacht, das man das anstatt ne schleife hoch zu zählen die bis zu einer gewissen Position rückwärts laufen lassen kann, so das sie an der richtigen stelle mit dem gewünschten Buchstaben wieder anfängt den Satz im Array auszugeben bzw anzusammeln bevor es ausgeben wird. Ich hoffe ihr versteht was ich meine... Schreib euch mal meinen Quelltext mit dazu evt kann mir ja jemand nen rat geben wie ich das am besten anpack... #include <stdio.h> #include <string.h> #define MAXLINE 15 void main () { // deklaration der Variablen int iEingabe; char sZeile [50]; int iZaehler; int iSpalte; int iLeerPos; int iSchleife; int iPos; // Zuordnung der Werte iEingabe = 'w'; iZaehler = 0; iSpalte = 0; iLeerPos = 0; iSchleife = 0; iPos = 0; while (iEingabe !='A') // Wird ausgeführt solange iEingabe nicht A ist { iEingabe = getchar(); // Übergabe der Werte an iEingabe sZeile [iZaehler] = iEingabe; // Übergabe der Werte an sZeile //++ iZaehler; if (iEingabe == ' ') //Überprüfung ob iEingabe ein Leerzeichen ist { iLeerPos = iZaehler; // iLeerPos bekommt den Wert von iZaehler und behält ihn so lange bis iZaehler wieder ein Leerzeichen ist. } if (iSpalte >= MAXLINE) // Überprüfung ob iSpalte größer/gleich MAXLINE ist { sZeile[iLeerPos] = '\n'; // sZeile gibt ein zeilentrenner aus wenn iSpalte größer/gleich MAXLINE ist iSpalte = -1; // iSpalte bekommt den wert -1 damit iSpalte nach dem Zeilentrenner wieder bei 0 beginnt. -1 Weil iSpalte gleich unten drunter wieder um 1 hochgezählt wird. } ++ iZaehler; // iZaehler wird hochgezählt ++ iSpalte; // iSpalte wird hochgezählt } sZeile[iZaehler] = '\0'; //sZeile setz \0 ans ende der Zeichenkette iLetztesZeichen = iZaehler +1; while (iSchleife < iZaehler) // Wird solange ausgeführt wie iSchleife < iZaehler ist { if (sZeile[iSchleife] == 'd') { iPos = iSchleife; ++iSchleife; if (sZeile[iSchleife] == 'i') { ++iSchleife; if (sZeile[iSchleife] == 'r') { sZeile[iPos] = 'i'; ++iPos; sZeile[iPos] = 'h'; ++iPos; sZeile[iPos] = 'n'; ++iPos; sZeile[iPos] = 'e'; ++iPos; sZeile[iPos] = 'n'; ++iPos; sZeile[iPos] = ' '; } } // sZeile[iSchleife] = 'E'; } ++iSchleife; // Zählt iSchleife hoch } printf ("%s", sZeile); // gibt die Zeichenkette sZeile aus }
  23. Kann das hier leider auch nicht testen mein compiler mag mich bzw mein betriebssytem nicht sonderlich. Werd es morgen ma testen und dir bericht erstatten... Danke vielmals für deine hilfe und der echt guten Erklärung... Das hab nun selbst ich verstanden :valen
  24. ja ich möchte die obige For schleife durch eine while ersetzen... hab nur leider absolut keine ahnung wie das funktioniert... aber das siehst du ja selbst
  25. while (iSchleife > iZaehler) { if (iSchleife < iZaehler) { sZeile[iSchleife] =='e'; } sZeile{iSchleife] = 'E'; } Meinst du das das so sein sollte???

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...