Matroids Matheplanet Forum Index
Forumbereich moderiert von: matph
Informatik » Programmieren » Programm bool justOnce(int feld[], int size)
Thema eröffnet 2020-11-21 17:07 von Kajam
Druckversion
Druckversion
Seite 2   [1 2]   2 Seiten
Universität/Hochschule J Programm bool justOnce(int feld[], int size)
viertel Senior Letzter Besuch: in der letzten Woche
Mitglied seit: 04.03.2003, Mitteilungen: 27582, aus: Hessen
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum ersten Beitrag
Beitrag No.40, eingetragen 2020-11-25 17:20

Welchen Sinn hat Beitrag #37?
Soweit ich erkennen kann ist es nur ein Quote von #36 🤔

In #36 habe ich die Code-Darstellung vervollständigt.
Zum einen solltest du bei längeren Codes diesen mit Numerierung ausgeben, also auf das [num] von [Quelltext [num.] klicken.
Und wenn du es dann noch schaffst, bei dem eingefügten Text

\­sourceon nameDerSprache
\numberson

\sourceoff

das nameDerSprache durch C++ zu ersetzen, dann ist ein weiterer Schritt für die Lesbarkeit getan.

[Die Antwort wurde nach Beitrag No.38 begonnen.]



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Kajam Aktiv Letzter Besuch: in der letzten Woche
Mitglied seit: 18.02.2020, Mitteilungen: 316
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum ersten Beitrag
Beitrag No.41, vom Themenstarter, eingetragen 2020-11-25 17:23

2020-11-25 16:44 - Kajam in Beitrag No. 37 schreibt:
2020-11-25 16:30 - Kajam in Beitrag No. 36 schreibt:
2020-11-25 00:37 - piteo in Beitrag No. 34 schreibt:
Das Programm will die geschweifte Klammer vor else haben, richtig, weil das, was hinter if (...) kommt, entweder eine Anweisung ist, oder eine Menge von Anweisungen zwischen geschweiften Klammern.
Genau so verhält es sich auch bei der for-Schleife: Nach for (...) kommt eine öffnende geschweifte Klammer, die zugehörige schließende ist die zweite vor else. So gehört "else" also zu "for" statt zu "if", und das mag das Programm nicht.

Noch etwas:
else-Schleifen gibt es nicht. Hinter "else" kommt das, was Dein Programm machen soll, wenn die Bedingung in den Klammern hinter "if" nicht erfüllt ist. Und das ist nicht: dem "rufenden" main-Programm zu sagen: "true", alles stimmt. Das wäre zu früh, wenn die for-Schleife noch gar nicht dazu gekommen ist, i auf 2 zu erhöhen (das macht das i++), damit das dritte Element von count angesehen wird (das mit dem Index 2).

Die Idee der zweiten Schleife ist: Wenn eine Ziffer nicht genau einmal vorkommt, dann kann dem main-Programm sofort mitgeteilt werden: false! Ansonsten müssen aber alle 9 Ziffern geprüft werden, um zu wissen: "Jede Ziffer kommt genau einmal vor". Erst nach Abschluss der Schleife, wenn nämlich i nicht mehr kleiner als 10 ist, kann dem main-Programm mitgeteilt werden: true!

Ich habe den Kommentar, das "return true;" hinter die for-Schleife einzufügen, beherzigt. Nun funktioniert das einigermaßen. Was mir aber auffällt: Es werden sehr viele true´s zurückgegeben. Ich frage mich, woran das jetzt liegt? Müssen nicht nur lediglich "9" Stück (true´s) zurückgegeben werden, da "Feld[9]"ist?:

#include <iostream>
 
using namespace std;
 
bool justOnce(int *feld, int size);
 
bool justOnce(int feld[], int size)
{
    if (size==-1)
    {
        feld[0] = -7;
        return false;
    }
    if (feld == NULL)
        throw runtime_error("nullptr not expected");
    int count[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    for (int i = 0; i < size; i++)
    {
        if (feld[i] <= 9 && feld[i] >= 1)
            count[feld[i]]++;
    }
 
    for (int i = 1; i < 10; i++)
    {
        if (count[i] != 1)
        {
            cout << "false" << endl;
            return false;
 
 
        }
        else
        {
            cout << "true" << endl;
 
        }
    }
    return true;
};
 
int main()
{
    int feld[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
    justOnce(feld, 9);
    cout << justOnce(feld, 9) << endl;
    return 0;
 
}
 
 
 
 



Bei "false" werden mir 8 false´s ausgegeben. Aber: Ich habe ja  {1, 2, 3, 9, 5, 6, 7, 8, 9}; - das sind 9 Felder.

1: true
2: true
3: true
4: false
5: true
6: true
7: true
8: true
9: false

oder nicht? Es wird ausgegeben:



Hier ist das Feld[8] "false". Irgendwas stimmt nicht oder? Ist das normal?



Und wieso macht das Programm hier mit der zweiten for-Schleife weiter, nachdem "return false;" ausgeführt worden ist? Wieso funktioniert das hier? Ich blicke hier nicht durch ... ;(

[Die Antwort wurde nach Beitrag No.38 begonnen.]



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
viertel Senior Letzter Besuch: in der letzten Woche
Mitglied seit: 04.03.2003, Mitteilungen: 27582, aus: Hessen
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum ersten Beitrag
Beitrag No.42, eingetragen 2020-11-25 17:24

Du kannst uns erzählen, was du willst😲
Bei dieses Fragen hast du nie und nimmer einen Bleistifttest (auch Schreibtischtest genannt) durchgeführt. Oder zumindest nicht ordentlich.
Denn dann würde dir sofort auffallen, woher die ganzen trues und falses kommen.

[Die Antwort wurde nach Beitrag No.40 begonnen.]



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
viertel Senior Letzter Besuch: in der letzten Woche
Mitglied seit: 04.03.2003, Mitteilungen: 27582, aus: Hessen
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum ersten Beitrag
Beitrag No.43, eingetragen 2020-11-25 17:25

Und das Ganze noch einmal zu quoten bringt auch keine neuen Erkenntnisse.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Kajam Aktiv Letzter Besuch: in der letzten Woche
Mitglied seit: 18.02.2020, Mitteilungen: 316
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum ersten Beitrag
Beitrag No.44, vom Themenstarter, eingetragen 2020-11-25 17:41

2020-11-25 17:18 - DerEinfaeltige in Beitrag No. 39 schreibt:
Du rufst die Funktion in der main zweimal auf.

Im ersten Fall erhälst du daher in der zweiten Schleife 9 mal die Ausgabe des Strings "true", insgesamt also 18 mal.
Weiterhin gibst du das Ergebnis des Funktionsaufrufs an die Konsole aus.
Dieses ist "1", da der bool'sche Wert true als Zahl 1 interpretiert wird.


Im zweiten Fall gibst du erst für 1,2,3 jeweils den String "true" an die Konsole aus.
Bei 4 wird dann die if-Bedingung erfüllt, der String "false" ausgegeben und der Wert false zurückgegeben.
Es wird also zweimal "true", "true", "true", "false" und anschließend der Rückgabewert false als 0 ausgegeben.

Das ganze verdoppelt sich also. Und nach false wird auch das Programm beendet.

Was ist denn die Aufrufung der Funktion in der main?
Das hier: justOnce(feld, 9); ?
Wo ist denn die zweite Aufrung?
Könntest du mir das erklären, weil das ist mir neu.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Kajam Aktiv Letzter Besuch: in der letzten Woche
Mitglied seit: 18.02.2020, Mitteilungen: 316
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum ersten Beitrag
Beitrag No.45, vom Themenstarter, eingetragen 2020-11-25 17:43

2020-11-25 17:24 - viertel in Beitrag No. 42 schreibt:
Du kannst uns erzählen, was du willst😲
Bei dieses Fragen hast du nie und nimmer einen Bleistifttest (auch Schreibtischtest genannt) durchgeführt. Oder zumindest nicht ordentlich.
Denn dann würde dir sofort auffallen, woher die ganzen trues und falses kommen.

[Die Antwort wurde nach Beitrag No.40 begonnen.]

In Beitrag #25 habe ich den Bleistifttest gemacht.

Und ich werde mich für die Lesebarkeit bemühen.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Kajam Aktiv Letzter Besuch: in der letzten Woche
Mitglied seit: 18.02.2020, Mitteilungen: 316
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum ersten Beitrag
Beitrag No.46, vom Themenstarter, eingetragen 2020-11-25 17:59

Das Problem ist jetzt: Ich möchte, dass mir alle true´s und false´s via "cout" ausgegeben werden. Das geht aber doch gar nicht, wenn return false; und return true; im Programm integriert sind, denn das Programm schließt sich immer, sobald eins davon erfüllt ist. Das heißt, ich lösche die Ausgaben via "cout" und lasse es einfach mit cout << justOnce(feld, 9) ausgeben. Ich bekomme nicht einzelne Ausgaben der Felder, ob true oder false, sondern das Endresultat, ob ture(1) oder false(0).

Liege ich hier richtig?



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
DerEinfaeltige Senior Letzter Besuch: in der letzten Woche
Mitglied seit: 11.02.2015, Mitteilungen: 2522
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum ersten Beitrag
Beitrag No.47, eingetragen 2020-11-25 18:31

2020-11-25 17:59 - Kajam in Beitrag No. 46 schreibt:
Das Problem ist jetzt: Ich möchte, dass mir alle true´s und false´s via "cout" ausgegeben werden.

Warum willst du das?

Die Aufgabe ist, eine Funktion zu implementieren, die überprüft, ob das Array die gewünschte Eigenschaft besitzt, jede Zahl von 1 bis 9 exakt einmal zu enthalten.
Die Antwort ist als bool'scher Wert zurückzugeben.

Eine Ausgabe ist allenfalls zu Test- oder Demonstrationszwecken interessant, hat aber weder mit der Funktionalität noch der Aufgabenstellung etwas zu tun.


-----------------
Why waste time learning when ignorance is instantaneous?
- Bill Watterson -



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Kajam Aktiv Letzter Besuch: in der letzten Woche
Mitglied seit: 18.02.2020, Mitteilungen: 316
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum ersten Beitrag
Beitrag No.48, vom Themenstarter, eingetragen 2020-11-25 19:44

Aber wieso wird alles zwei mal ausgegeben. Was ist jetzt doppelt? Ich habe das hier so gemacht wie die Programme davor...



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
DerEinfaeltige Senior Letzter Besuch: in der letzten Woche
Mitglied seit: 11.02.2015, Mitteilungen: 2522
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum ersten Beitrag
Beitrag No.49, eingetragen 2020-11-25 20:09

Was genau passiert denn in deiner main-Funktion?


-----------------
Why waste time learning when ignorance is instantaneous?
- Bill Watterson -



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Kajam Aktiv Letzter Besuch: in der letzten Woche
Mitglied seit: 18.02.2020, Mitteilungen: 316
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum ersten Beitrag
Beitrag No.50, vom Themenstarter, eingetragen 2020-11-25 20:14

1. Es wird ein Array definiert.
2. Die Funktion boolOnce(feld, 9) über der Main Funktion wird ausgeführt.
3. Es wird die Funktion ausgegeben. 1 oder 0.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
viertel Senior Letzter Besuch: in der letzten Woche
Mitglied seit: 04.03.2003, Mitteilungen: 27582, aus: Hessen
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum ersten Beitrag
Beitrag No.51, eingetragen 2020-11-25 20:22

Und genau das soll doch passieren.
Vorausgesetzt, daß onlyOnce (nicht boolOnce😉) das Ergebnis korrekt ermittelt und zurückgibt.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Kajam Aktiv Letzter Besuch: in der letzten Woche
Mitglied seit: 18.02.2020, Mitteilungen: 316
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum ersten Beitrag
Beitrag No.52, vom Themenstarter, eingetragen 2020-11-25 21:49

Und hier wird nur einmalig 1 oder 0 zurück gegeben, nicht doppelt. Aber davor alles doppelt (mehrmals) mit den ganzen trues und falses. Woran lag das? Ich will das noch verstehen :)



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
DerEinfaeltige Senior Letzter Besuch: in der letzten Woche
Mitglied seit: 11.02.2015, Mitteilungen: 2522
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum ersten Beitrag
Beitrag No.53, eingetragen 2020-11-25 22:42
C++
    justOnce(feld, 9);
 

Hier rufst du die Funktion auf.
Als Seiteneffekt werden ein paar Ausgaben an die Standardausgabe geleitet.
Der Rückgabewert der Funktion wird ignoriert.


C++
    cout << justOnce(feld, 9) << endl;
 

Hier rufst du die Funktion erneut mit den gleichen Argumenten auf und leitest den Rückgabewert diesmal an die Standardausgabe.
Wieder treten als Seiteneffekt ein paar Ausgaben an die Standardausgabe auf.


-----------------
Why waste time learning when ignorance is instantaneous?
- Bill Watterson -



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Kajam Aktiv Letzter Besuch: in der letzten Woche
Mitglied seit: 18.02.2020, Mitteilungen: 316
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum ersten Beitrag
Beitrag No.54, vom Themenstarter, eingetragen 2020-11-25 23:35

Aso, beides (justOnce(feld, 9);, und cout << justOnce(feld, 9) << endl;)
ist eine Funktionsaufrufung und quasi das gleiche? Das heißt, ich kann eins davon wegnehmen? Dann am besten das erste, denn das zweite ignoriert den Ruckgabewert 0 oder 1 also nicht. Alles klar.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
viertel Senior Letzter Besuch: in der letzten Woche
Mitglied seit: 04.03.2003, Mitteilungen: 27582, aus: Hessen
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum ersten Beitrag
Beitrag No.55, eingetragen 2020-11-26 01:38

Und immer noch behaupte ich:
Bei einem ordentlichen Schreibtischtest hättest du selbst gemerkt, woher die doppelte Ausgabe kommt!
Aber es ist ja so viel einfacher, sich hier die Finger wund zu schreiben und zu fragen, solange noch jemand Lust hat, zu antworten.

In einer Klausur hast du dann niemanden, den du fragen kannst.
Wenn du dann die Techniken nicht kennst/kannst, läufst du gegen die Wand😛



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Kajam hat die Antworten auf ihre/seine Frage gesehen.
Kajam hat selbst das Ok-Häkchen gesetzt.
Seite 2Gehe zur Seite: 1 | 2  
Neues Thema [Neues Thema]  Druckversion [Druckversion]

 


Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2020 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]