Hilfe - Projektarbeit - C Programm - Verzweifelt

PeterGriffin

Grünschnabel
Guten Tag,
ich muss am Mittwoch meine Projektarbeit in C abgeben. Leider ist es so, dass ich nach dem Prinzip "Try and Error" unterricht werde. Mir fällt es schwer für ganz simple Aufgaben Codes zu schreiben oder zu lesen, um diese zu verstehen.
Einen struktuierten Aufbau, um alles zu verstehen von Beginn an ist nicht gegeben.
Dank Youtube und zich Websites (deutsche und englische) sind mir einige Bruchteile klar.
Meine beiden Programme funktionieren zwar, aber geben nicht das aus, was sie sollen.

Info:
Ich bin wirklich ein absoluter Anfänger... ich fange bei 0 an...


Erste Aufgabe:
Die Anwendung nimmt zwei Wörter (Text) entgegen, und gibt alle Zeichen des zweiten
Wortes als Text zurück, die im ersten Wort enthalten sind.

C:
#include <stdio.h>
#include <string.h>
int main()
{
   char str[20],ch;
   int i,n,j;
   printf("Gib etwas ein: ");
   scanf("%s",str);
   printf("Welchen Buchstaben loeschen?: ");
   scanf(" %c",&ch);
   n=strlen(str);
   for(i=0,j=0;i<n;i++)
   {
       if(str[i]!=ch)
       {
           str[j]=str[i];
           j++;
       }
   }
   str[j]='\0';
   printf("Neues Wort = %s",str);
   return 0;
}

Es ist mir hier möglich ein Wort einzugeben z,b "Hello" und danach Buchstaben die gelöscht werden sollen.
Wie kriege ich es hin, dass ich nicht nur ein Wort, sondern ein Satz eingeben kann, der automatisch alle Buchstaben löscht, die nicht an zweiter Stelle sind?

Aufgabe 2:
Die Anwendung nimmt eine natürliche Zahl entgegen, zeigt die Summe ihrer echten Teiler an
und das Wort „perfect“, falls diese Summe mit der Zahl übereinstimmt.
Beispiele: perfectnumber 45 → 1+3+5+9+15= 33
perfectnumber 6 → 1+2+3 = 6 perfect

Bei diesem Code schaffe ich es nicht bzw. ich kriege es nicht hin, dass neben den Teilern auch der Satz "Die Zahl 6 ist perfekt" angezeigt wird. Es zeigt mir bisher nur an, dass die Zahl 6 nicht pefekt ist.
C:
#include <stdio.h>
#include <stdlib.h>
int main (void)
{

//definiere Variablen
int input, sum, n;


//Eingabe der Zahlen
printf("Geben Sie eine Zahl ein: ");
scanf("%d", &input);

//Ausgabe der einzelnen Faktoren
printf("Faktoreingabe %d :\n", input);

for (n=1, sum=0; n <= input; n++) // die Variable bekommt einen Wert, eine Bedingung folgt & Eine Reinitialisierung, was mit der Variable gemacht werden soll
{
    if (input % n == 0)
   {
        printf("%d\n", n);
        sum += n;
    }
}
//Summe der Faktoren
//printf("Summe der Faktoren sind = %d", sum);

//Passt es? Überprüfung der Eingaben
if ((sum + input) == input) {
  
    printf("%d Die Zahl passt", n, input);
}
{
    printf("%d die Zahl passt nicht", input);
}

return 0;
}

Ich erwarte keine großen Wunder, ich versuche verzweiflt das Wochenende die simplen Aufgaben umzusezen, um in der Schule nicht gleich die schlechteste Note zu kassieren....
falls aber jemand so nett ist & meinen Anfang korrgieren könnte, wäre es echt super.

Ich arbeite mit DEV-C++

Danke vor ab!

PS: Falls jemand den Code korrigiert und richtig zum laufen bringt, könnte der auch bitte kommentiert werden, damit ich es besser nachvollziehen kann?
 

cwriter

Erfahrenes Mitglied
Es ist mir hier möglich ein Wort einzugeben z,b "Hello" und danach Buchstaben die gelöscht werden sollen.
Wie bitte? War die Aufgabe nicht, zwei Wörter einzulesen?
Die Anwendung nimmt zwei Wörter (Text) entgegen, und gibt alle Zeichen des zweiten
Wortes als Text zurück, die im ersten Wort enthalten sind.
Wie kriege ich es hin, dass ich nicht nur ein Wort, sondern ein Satz eingeben kann, der automatisch alle Buchstaben löscht, die nicht an zweiter Stelle sind?
Entweder du liest mehrmals von scanf("%s"), oder du machst etwas wie scanf("%[^\n]") oder fgets(temp, 256, stdin).

Bei diesem Code schaffe ich es nicht bzw. ich kriege es nicht hin, dass neben den Teilern auch der Satz "Die Zahl 6 ist perfekt" angezeigt wird. Es zeigt mir bisher nur an, dass die Zahl 6 nicht pefekt ist.
(sum + input) == input ist das Problem
Du willst ja eigentlich sum == input haben.

Und da fehlt ein "else" zwischen den Blöcken...

Gruss
cwriter
 
Zuletzt bearbeitet:

PeterGriffin

Grünschnabel
Wie bitte? War die Aufgabe nicht, zwei Wörter einzulesen?


Entweder du liest mehrmals von scanf("%s"), oder du machst etwas wie scanf("%[^\n]") oder fgets(temp, 256, stdin).


(sum + input) == input ist das Problem
Du willst ja eigentlich sum == input haben.

Und da fehlt ein "else" zwischen den Blöcken...

Gruss
cwriter

Die Aufgabe war zwei Wörter einzulesen, ja. Ich bekomme es nicht hin. Ich weiß nicht wie ich es in die Programmiersprache umsetzen soll.

Ich habe bei der perfekten Zahl folgendes eingetragen:
C:
if (sum == input) {
   
    printf("%d Die Zahl passt", n, input);
}
else
{
    printf("%d die Zahl passt nicht", input);
}

return 0;
}

komme aber immer noch nicht zu der Lösung
 

cwriter

Erfahrenes Mitglied
Ich habe bei der perfekten Zahl folgendes eingetragen:
for (n=1, sum=0; n <= input; n++)
Der Loop zählt zu hoch. Nimm n < input.

Die Aufgabe war zwei Wörter einzulesen, ja. Ich bekomme es nicht hin. Ich weiß nicht wie ich es in die Programmiersprache umsetzen soll.
Echt jetzt?
Ein Wort einlesen:
C:
scanf("%s", wort1);

Zwei Wörter einlesen:
C:
int read1 = scanf("%s", wort1);
int read2 = scanf("%s", wort2);

//read1 und read2 beinhalten die Anzahl gelesener Elemente (strings), sollten hier also beide 1 sein.
assert(read1 == 1 && read2 == 1);


Gruss
cwriter
 

PeterGriffin

Grünschnabel
Hi,
danke. Die perfekte Zahl funktioniert.

Zu den Wörtern,
Ich lese die Wörter aus, bestimme selbst welche Buchstaben gelöscht werden sollen.
So ganz ist das nicht richtig. Der automatismus fehlt, der am Ende selbst die Buchstaben entfernt, die nicht an zweiter Stelle sind.

Wo ist da der Fehler?
 
Zuletzt bearbeitet:

cwriter

Erfahrenes Mitglied
So ganz ist das nicht richtig. Der automatismus fehlt, der am Ende selbst die Buchstaben entfernt, die nicht an zweiter Stelle sind.
Ich verstehe noch immer nicht ganz, was eigentlich die Aufgabe sein soll.
Die Anwendung nimmt zwei Wörter (Text) entgegen, und gibt alle Zeichen des zweiten
Wortes als Text zurück, die im ersten Wort enthalten sind.
Heisst "Wort" und "Text", dass es noch Sinn machen muss, oder sind es einfach Zeichenketten? Und was heisst "als Text"?
Falls es nur ein "Hangman"-Style "fülle alle Zeichen ein" sein soll, kannst du einfach über alle Zeichen in wort2 loopen in jeder Iteration alle Zeichen in wort1 anschauen. Wurde irgendein Zeichen in wort1 gefunden, das auf die aktuelle Iteration passt, füge dieses Zeichen der Ausgabe hinzu, sonst nicht.

Gruss
cwriter