www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "C/C++" - Übergabe von int zahl
Übergabe von int zahl < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Übergabe von int zahl: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 10:50 So 16.05.2010
Autor: marike

Hallo,

ich soll eine Funktion Set0 schreiben die das i-te Element des Arrays auf 0 sezt. Sicherstellung soll mit dem Assertbefehl erfolgen, dass i eine gültige
Position im Array hat.

int Set0(int Vektor[],int laenge,int i); ->Deklaration
void main()
{
int Vektor[5];
{for (int i=0;i<5;i++)        
Vektor[i]=5;
}
cout<<"eingabe i-tes element welches auf 0 gesetzt werden soll"<<endl;
cin>>i;
Set0(Vektor,5,i);                        
-> weiss nicht wie ich der Funktion die int zahl übergeben kann, hier kommt nichtdeklariet als Fehler
}
int Set0(int Vektor[],int laenge,int i) ->Definiton
{return vektor[i]=0;
}
wie implemiere ich dort einen assert befehl, bzw. was ist das genau?

        
Bezug
Übergabe von int zahl: Antwort
Status: (Antwort) fertig Status 
Datum: 13:27 So 16.05.2010
Autor: Event_Horizon

Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)

Hallo!
Erstmal ein anderer Fehler in deinem Code:


{for (int i=0;i<5;i++)  
Vektor[i]=5;
}

Das '{' gehört ans Ende der zeile. Denn das FOR wiederholt immer nur die nächste Anweisung. Die nächste Anweisung ist hier nur das Setzen des Arrayelements, weshalb das so fehlerfrei funktioniert.
Sollte die FOR-Schleife aber mehr als zwei Zeilen verarbeiten, müssen die mit {} zu einem Block zusammengefaßt werden. So wie hier macht das aber keinen Sinn, funktioniert aber dennoch.


Weiter:

Dein Set0 sollte erstmal nichts zurückgeben. Du sagst der Funktion, an welcher Adresse im Speicher das INT-Array beginnt, wie lang es ist, und welches Element davon auf 0 gesetzt werden soll.

Die Funktion schreibt dann selbst an die Adresse mit dem gewünschten Element eine 0, und damit ist ihr zweck erfüllt. Sie muß nichts zurück geben, und kann daher als void deklariert werden.


Der Fehler, der dein Compiler ausspuckt, hat wenig mit Set0 zu tun, sondern schon darüber, bei dem cin. Die Variable i ist nicht definiert. Zwar hast du ein i in der FOR-Schleife deklariert, das existiert aber auch nur da, und verschwindet nach der FOR-Schleife.

Guckstdu:

for(int i=0; i<10;i++){
   cout <<i<<endl;        //das ist OK
}
cout << i<<endl;    // CompilerError: i nicht deklariert

Aber so geht es:

int i;
for(i=0; i<10;i++){
   cout <<i<<endl;        //das ist OK
}
cout << i<<endl;    // gibt 10 aus, weil die FOR-Schleife bei i=10 abgebrochen ist



Du kannst das i also recyclen, oder aber zum besseren Verständnis ne neue Variable einführen.



Was nun den assert-Befehl angeht: Ich habe das so verstanden: assert(Bedingung) beendet das Programm sofort und gibt ne Meldung raus, wenn die Bedingung gleich 0 bzw FALSE ist. Der Befehl kommt also noch vor das Setzen des Vektors in Set0.

Dein i darf ja nur die Werte 0...4 annehmen, sonst würdest du in einen Speicherbereich außerhalb des Arrays schreiben. Das ist die Bedingung...



Bezug
                
Bezug
Übergabe von int zahl: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 13:43 So 16.05.2010
Autor: marike

Hallo,

vielen Dank für deine Hilfe:
ich habe den progrmmcode geändert, passt das
grob so?

1 include<iostream>
2 include<cassert>
3 using namespace std;
4 int Set0(int Vektor[],int laenge,int i);
5 void main()
   {
6 int Vektor[5];
7 for (int i=0;i<5;i++)        
8 {Vektor[i]=9;
9 cout<<Vektor[i]<<endl;}
10 int zero;

11 cout<<"i-ter Platz -> 0 setzen"<<endl;
12 cin>>zero;

13 int i=zero;
14 Set0(Vektor,5,i);

15 cout<<"****Aktuelle Ausgabe****"<<endl;
16 for(int i=0;i<5;i++)
17 cout<<Vektor[i]<<endl;

}

18 int Set0(int Vektor[],int laenge, int i)

{
19 assert(i>=0 && i<4 );
20 return Vektor[i]=0;

}


Bezug
                        
Bezug
Übergabe von int zahl: Antwort
Status: (Antwort) fertig Status 
Datum: 18:17 So 16.05.2010
Autor: Event_Horizon

Hallo!

13 int i=zero;
14 Set0(Vektor,5,i);


Brauchst du nicht, es reicht

Set0(Vektor,5,zero);

Denn: Du hast in Set0() und main() zwar die Variablen gleich genannt, aber das ist dem Compiler völlig egal. Der rechnet eh nicht mit aussagenkräftigen Namen.

Mit
int Set0(int Vektor[],int laenge,int i);

legst du nur fest, daß es eine Funktion Set0 gibt, die ein INT zurückgeben wird. Der erste Übergabeparameter ist der Zeiger auf ein Array von Integer-Werten, der zweite Wert ist ein Integer, und der dritte ebenfalls.
Das ist wichtig, wenn du die Funktion von außerhalb aufrufst.

Innerhalb der Funktion trägt das Array den Namen Vektor, und die beiden INTs die Namen laenge und i.
Damit hast du den Werten in main() und Set0 die gleichen Namen gegeben, aber es wäre doof, wenn man das immer so machen müßte.

Dann hatte ich gesagt, daß das set0() nichts zurückgeben muß.

Also

18 void Set0(int Vektor[],int laenge, int i)

{
19 assert(i>=0 && i<laenge );   // die Länge wird ja mitgegeben!
20 Vektor[i]=0;
21 return;
}

reicht vollkommen.


Ein kleiner tipp noch:


16 for(int i=0;i<5;i++){   // hier fehlte wieder die klammer
17 cout << "Element "<<i<<" ist "<<Vektor[i]<<endl;

}

gibt etwas deutlicher an,welches Element nun 0 gesetzt wurde.


Bezug
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.mathebank.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]