Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » problem mit Aufgabe in C

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
15.11.2005, 18:51 Uhr
nicknase



Hallo,
habe Problem mit folgender Aufgabe.
Bin noch ziemlich neu in c also sprich 1 Semester Informatik.

Aufgabe //////////////////////////////
Entwerfen Sie ein Programm, das verschiedene Vektor-Operationen
durchführt.
• Jede Operation soll durch eine eigene Funktion realisiert werden.
Geben Sie das jeweilige Ergebnis aus.
• Die Größe des Vektors soll sich vor dem Compilieren durch einen #define
festlegen lassen.
• Verwenden Sie unterschiedliche Schleifentypen.
• Verwenden Sie Zeiger für die Parameterübergabe!
• Erstellen Sie vor der Implementierung ein Struktogramm für jede
Programmkomponente. (Ohne Struktogramm keine Abnahme)

Die Werte Global zu definieren ist ja kein Problem hab ich mal gemacht und es funktioniert:

C++:
#include <stdio.h>
#include <conio.h>
#define vek 3


int vektor1[vek];
int vektor2[vek];
int ergadd[vek];

int eingabe()
{



int i;
for (i=0;i<vek;i++)
{
printf ("Geben Sie Vektor 1 ein");
scanf ("%d",&vektor1[i]);
}
int g;
for (g=0;g<vek;g++)
{
printf ("Geben Sie Vektor 2 ein");
scanf ("%d",&vektor2[g]);
}

return 0;

}
int add()
{

ergadd[0]=vektor1[0]+vektor2[0];
ergadd[1]=vektor1[1]+vektor2[1];
ergadd[2]=vektor1[2]+vektor2[2];

return 0;

}
int ausgabe()


{


int i;

for(i=0;i<vek;i++)
{

printf ("Ergebniss =%d",ergadd[i]);



getch();


}




}

int main()
{

eingabe();
add();
ausgabe();
getch();


}
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
15.11.2005, 18:53 Uhr
nicknase



aber das mit den in die funktion zu übergeben mit zeigern bekomme ich nicht hin.



C++:


#include <stdio.h>
#include <conio.h>
#define vek 3

int eingabe(int *z_vektor1[],int *z_vektor2[])
{

int vektor1[vek];
int vektor2[vek];

z_vektor1[0]=&vektor1[0];
z_vektor1[1]=&vektor1[1];
z_vektor1[2]=&vektor1[2];


z_vektor2[0]=&vektor2[0];
z_vektor2[1]=&vektor2[1];
z_vektor2[2]=&vektor2[2];


int i;
for (i=0;i<vek;i++)
{
printf ("Geben Sie Vektor 1 ein");
scanf ("%d",&vektor1[i]);
}
int g;
for (g=0;g<vek;g++)
{
printf ("Geben Sie Vektor 2 ein");
scanf ("%d",&vektor2[g]);
}


}
int add(int *z_vektor1[vek],int *z_vektor2[vek])
{


int ergadd[vek];

int *z_ergadd[vek];


z_ergadd[0]=&ergadd[0];
z_ergadd[1]=&ergadd[1];
z_ergadd[2]=&ergadd[2];

z_ergadd[0]=z_vektor1[0]+z_vektor2[0];
z_ergadd[1]=z_vektor1[1]+z_vektor2[1];
z_ergadd[2]=z_vektor1[2]+z_vektor2[2];



}
int ausgabe(int *z_ergadd[])


{


int i;

for(i=0;i<vek;i++)
{

printf ("Ergebniss =%d",z_ergadd[i]);

getch();


}




}

int main()
{
int vek1;
int vek2,
int erg;
eingabe(vek1,vek2);
add(vek1,vek2);
ausgabe(erg);
getch();



return 0;
}
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
15.11.2005, 19:19 Uhr
Pler
Einer von Vielen
(Operator)



C++:
z_vektor1[1]=&vektor1[1];
z_vektor1[2]=&vektor1[2];

z_vektor2[1]=&vektor2[1];
z_vektor2[2]=&vektor2[2];


diese Zeilen brauchst du eigentlich nicht.
z_vektorX brauchst du im hauptprogramm gar nicht

du kannst das so an die funktion übergeben:

C++:
add( &vektor1 , &vektor2 );



die funktion könnte ungefähr so aussehen:

C++:
int** add( int** z_vektor1 , int** z_vektor2 )
{
  *z_vektor1[0] += *z_vektor2[0];
  *z_vektor1[1] += *z_vektor2[1];
  *z_vektor1[2] += *z_vektor2[2];

  return z_vektor1;
}



hier überschreibst du aber vektor1, wenn der erhalten bleiben soll, musst du einen dritten einführen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
15.11.2005, 19:20 Uhr
Zerstreuter



Hier 'ne kleine Hilfestellung


C++:
void VectorAdd(int *veca, int *vecb, int *erg)
{    for (int i=0 ; i<vek ; i++)
          erg[i] = veca[i] + vecb[i];
}



[edit]während ich drei Zeilen schreibe, posten andere ganze Romane *schneuff*

Dieser Post wurde am 15.11.2005 um 19:22 Uhr von Zerstreuter editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
15.11.2005, 19:26 Uhr
Pler
Einer von Vielen
(Operator)



Zitat von Zerstreuter:

während ich drei Zeilen schreibe, posten andere ganze Romane *schneuff*


naja der inhalt ist ja der gleiche; obwohl du nicht verrätst wie die funktion dann aufgerufen wird
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
15.11.2005, 19:51 Uhr
nicknase



Hallo,
kann ich dann nur mit zeigern arbeiten?




gruss


Nick nase


C++:
#include <stdio.h>
#include <conio.h>
#define vek 3


int eingabe(int *veca,int *vecb)
{

int i;
for (i=0;i<vek;i++)
{
printf ("Geben Sie Vektor 1 ein");
scanf ("%d",&veca[i]);
}
int g;
for (g=0;g<vek;g++)
{
printf ("Geben Sie Vektor 2 ein");
scanf ("%d",&vecb[g]);


return 0;
}


}
int add(int *veca,int *vecb,int *erg)
{

int i;

for(i=0;i<vek;i++)
{
erg[i]=veca[i]+vecb[i];
}

return 0;
}
int ausgabe(int *erg)


{


int e;

for(e=0;e<vek;e++)
{

printf ("Ergebniss =%d",erg[e]);

getch();
return 0;

}




}

int main()
{
int veca,vecb,erg;

eingabe(&veca,&vecb);
add(&veca,&vecb,&erg);
ausgabe(&erg);
getch();

return 0;

}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
15.11.2005, 20:48 Uhr
Zerstreuter



Die Funktionen sehen soweit gut aus; nur bei der main-Funktion hapert's noch ein bischen:


C++:
int main()
{
    int veca[vek], vecb[vek], erg[vek];  // wir wollen ja selbsgebastelte Vektoren und keine einfachen Integers

    eingabe(&veca[0],  &vecb[0]);        // Die Funktionen erwarten einen Zeiger auf ein int und keinen Zeiger auf ein Array; sieht aber doof aus deswegen...
    eingabe(veca, vecb);                    // 'veca' ist das gleiche wie '&veca[0]' weshalb der Aufruf auch so aussehen kann
    add(veca, vecb, erg);
    ausgabe( erg );
    getch();

    return 0;
}



Noch zwei Hinweise: Den Return-Wert bei den Funktionen kann man sich schenken und bei ausgabe() hast du dich mit den Klammern leicht vertan:

C++:
void ausgabe(int *erg)
{
    int e;

    for(e=0;e<vek;e++)
    {
        printf ("Ergebniss =%d",erg[e]);
    }

    getch();
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
15.11.2005, 21:03 Uhr
Pler
Einer von Vielen
(Operator)



C++:
int main()
{
int veca,vecb,erg;


ist doch auch falsch.
Du brauchst shcon ein feld mit 3 int s


C++:
int main()
{
int veca[3],vecb[3],erg[3];



veca ist jetzt ein Zeiger auf ein int nämlich auf das erste element vom feld (das ist das gleiche wie &veca[0]

veca[1] ist ein int.

du kannst deine funktion auch so aufrufen:

reg = add( veca , vecb );

allerdings musst du die dann wieder anders schreiben.

Kommt immer drauf an was du vor hast.

Schau dir mal das Thema "call by value - call by referenz" in irgend nem buch an. Sonst bringt dir das hier gar nichts.


Bearbeitung:

diesmal war ich zu langsam (viel zu langsam)


Dieser Post wurde am 15.11.2005 um 21:04 Uhr von Pler editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
15.11.2005, 21:09 Uhr
nicknase



Hallo,
hatte m,ein Programm getestet lief so weit.

nur wollte ich jetzt in main()
eine funktion verarbeitung aufrufen

in der funktion verarbeitung sind dann die funktion add und mult so etwa :


C++:

#include <stdio.h>
#include <conio.h>
#define vek 3



int eingabe(int *veca,int *vecb)   // Eingabe
{

int i;
for (i=0;i<vek;i++)
{
printf ("Geben Sie Vektor 1 ein"); // eingabe vektor 1
scanf ("%d",&veca[i]);
}
int g;
for (g=0;g<vek;g++)                      
{  
printf ("Geben Sie Vektor 2 ein");   // eingabe vektor 2 for schleife zählt hoch bis 3
scanf ("%d",&vecb[g]);



}
return 0;

}


verarbeitung(){

int add(int *veca,int *vecb,int *erg)  // addition von vektor a mit b
{


int e;

for(e=0;e<vek;e++)
{
erg[e]=veca[e]+vecb[e];     // erg = vektor a + b wird 3 mal durchgegangen
}


return 0;
}



int mult(int *veca,int *erg)
{
         // vektor 1 wird mit einem skalar multiplieziert
int skalar;
skalar=2;

int e;

for(e=0;e<vek;e++)
{
erg[e]=veca[e]*skalar;
}

return 0;
}












int veca,vecb,erg;
int wahl;
printf ("\n Addition von Vektor oder Multiplikation ?");
printf ("\nAddition 1");
printf ("\n Multiplikation 2");

scanf ("%d",&wahl);

if (wahl==1)
{

add(&veca,&vecb,&erg);
}
else
{
mult(&veca,&erg);

}
}



int ausgabe(int *erg)             // Ausgabe


{


int f;

for(f=0;f<vek;f++)
{

printf ("\nErgebniss =%d",erg[f]);

getch();


}

return 0;



}

int main()
{
int veca,vecb,erg;


eingabe(&veca,&vecb);
verarbeitung();
ausgabe(&erg);
getch();


return 0;

}



müsste so in etwa funktionieren oder
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
15.11.2005, 21:14 Uhr
Pler
Einer von Vielen
(Operator)


Du gibst dir ja nicht die geringste Mühe den Code etwas lesbar zu machen.
Beim letzten Post machst du ja alle Fehler wieder. Wenn nicht noch mehr drin sind.
Du deklarierst die funktion ohne argument, geifst trotzdem auf sie zu. delklarierst ne funktion in einer funktion (so was hab ich ja noch gar nicht gesehen).

Eigentlich brauchst dir nur die letzten Posts durchzuschaune da steht alles schon mal drin.
Trotzdem nochmal:


Zitat von mir:

Schau dir mal das Thema "call by value - call by referenz" in irgend nem buch an. Sonst bringt dir das hier gar nichts.


Dieser Post wurde am 15.11.2005 um 21:14 Uhr von Pler editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: