Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   C++ [C] Probleme mit Aufgabe und Variablen (https://www.delphipraxis.net/154918-%5Bc%5D-probleme-mit-aufgabe-und-variablen.html)

Hybrid666 30. Sep 2010 16:52

[C] Probleme mit Aufgabe und Variablen
 
Hallo,

zuerst: KEINE ANGST! ich will hier keine lösung für meine aufgabe, die ich zu bearbeiten habe. ich hänge grade nur an einer stelle.

Ich habe folgende aufgabe (auch wenn ich das meiste sinnfrei finde, wie das gelöst ist):
Zitat:

Schreiben Sie ein Programm, welches 2 float-Zahlen a und b mit der Funktion einlesen() einliest, und dann mit der Funktion average () den Durschnitt, mit der Funktion quotient() den Quotienten, mit der funktion produkt() das Produkt, mit der funktion summe() die Summe und mit der Funktion differ() die Differenz berechnet. Alle Funktionen sollen in main() aufgerufen werden. Jede funktion steht in einer eigenen Datei. Der Dateiname bildet sich aus dem jeweiligen Funktionsnamen und der endung.c

Die Zahl a soll eine globaale Variable sein und in der Datei main.c definiert sein. Die zahl b soll über die Parameterliste übergeben werden. Die ergebnisse der arithmetischen Operationen sollen bei average(), quotient() und produkt() über die Parameterliste, bei summe() und differ() als Rückgabewert übergeben werden
Dazu bekamen wir diese main.c:
Code:
#include <stdio.h>
#include "einlesen.c"
#include "average.c"
#include "quotient.c"
#include "produkt.c"
#include "summe.c"
#include "differ.c"



extern void einlesen (float *, float *);
extern void average (float, float *);
extern void quotient (float, float *);
extern void produkt (float, float *);
extern float summe (float);
extern float differ (float);

float a;

int main (void)
{
   float b;
   float mittel, quot, prod, summ, diff;

   einlesen (&a, &b);
   average (b, &mittel);
   quotient (b, &quot);
   produkt (b, &prod);

   summ = summe (b);
   diff = differ (b);
   printf ("\n a = %6.2f, b = 6.2f",a,b);
   printf ("\n der Mittelwert von a und b ist %6.2f", mittel);
   printf ("\n das Produkt a*b ist %6.2f", prod);
   printf ("\n der Quotient a/b ist %6.2f", quot);
   printf ("\n die Summe a + b ist %6.2f", summ);
   printf ("\n die Differenz ist %6.2f", diff);
   return 0;
}
Die anderen Dateien sehen bei mir wie folgt aus:

einlesen.c:
Code:
#include <stdio.h>

void einlesen (float * first, float * second) {
   printf ("Bitte a eingeben: ");
   scanf ("%f", first);
   printf ("Bitte b eingeben: ");
   scanf ("%f", second);
}
average.c:
Code:
void average (float num, float * res) {
  *res = (a / num) / 2;
}
quotient.c:
Code:
void quotient (float num, float * res) {
  *res = num / a;
}
usw. eigentlich nichts späktakuläres (und total unsinnig alles in einzelne files zu packen, aber OK).

Nun habe ich das problem, das keine der externen dateien die variable "a" findet.
Der Compiler meldet:
Code:
user@bueckstueck02 ~/Desktop/Labor Info/blatt1/aufg1 $ gcc -o main main.c
In file included from main.c:3:
average.c: In Funktion »average«:
average.c:2: Fehler: »a« nicht deklariert (erste Benutzung in dieser Funktion)
average.c:2: Fehler: (Jeder nicht deklarierte Bezeichner wird nur einmal aufgeführt
average.c:2: Fehler: für jede Funktion in der er auftritt.)
In file included from main.c:4:
quotient.c: In Funktion »quotient«:
quotient.c:2: Fehler: »a« nicht deklariert (erste Benutzung in dieser Funktion)
In file included from main.c:5:
produkt.c: In Funktion »produkt«:
produkt.c:2: Fehler: »a« nicht deklariert (erste Benutzung in dieser Funktion)
In file included from main.c:6:
summe.c: In Funktion »summe«:
summe.c:2: Fehler: »a« nicht deklariert (erste Benutzung in dieser Funktion)
In file included from main.c:7:
differ.c: In Funktion »differ«:
differ.c:2: Fehler: »a« nicht deklariert (erste Benutzung in dieser Funktion)
user@bueckstueck02 ~/Desktop/Labor Info/blatt1/aufg1 $
Woran liegt das? ich glaube nicht, das es an der main.c liegt, da die fertig schon da war und das labor in den jahren davor ja auch zu machen war.

Danke für eure hilfe!

hoika 30. Sep 2010 16:57

AW: [C] Probleme mit Aufgabe und Variablen
 
Hallo,

musst du nicht auch extern float a in den anderen Dateien machen ?


Heiko

Hybrid666 30. Sep 2010 16:59

AW: [C] Probleme mit Aufgabe und Variablen
 
hab ich auch grade gemerkt :D danke.

allerdings bleibt mir dann nur das hier:
Code:
user@bueckstueck02 ~/Desktop/Labor Info/blatt1/aufg1 $ gcc -o main main.c
/tmp/cc0775xc.o: In function `average':
main.c:(.text+0x79): undefined reference to `a'
/tmp/cc0775xc.o: In function `quotient':
main.c:(.text+0xa9): undefined reference to `a'
/tmp/cc0775xc.o: In function `produkt':
main.c:(.text+0xd1): undefined reference to `a'
/tmp/cc0775xc.o: In function `summe':
main.c:(.text+0xf1): undefined reference to `a'
/tmp/cc0775xc.o: In function `differ':
main.c:(.text+0x109): undefined reference to `a'
/tmp/cc0775xc.o:main.c:(.text+0x124): more undefined references to `a' follow
collect2: ld gab 1 als Ende-Status zurück
Ich weiß langsam nimmer weiter :( ich weiß warum ich sonst nie mit globalen sachen arbeite.

EDIT: Fehler gefunden. war ein kleiner fehler in der main.c.

DANKE!

hoika 30. Sep 2010 17:02

AW: [C] Probleme mit Aufgabe und Variablen
 
Hallo,

du must dem gcc alle c files angeben

gcc 1.c 2.c 3.c -o explorer.exe

;)

siehe auch hier http://www.network-theory.co.uk/docs...cintro_11.html


Heiko

shmia 30. Sep 2010 17:11

AW: [C] Probleme mit Aufgabe und Variablen
 
Wenn ich das sehe, dann bekomme ich das kalte Grausen :lol:
Code:
extern void einlesen (float *, float *);
extern void average (float, float *);
extern void quotient (float, float *);
extern void produkt (float, float *);
extern float summe (float);
extern float differ (float);
und zwar deshalb:
1.) keine Parameternamen - somit sieht man nicht was übergeben werden soll
2.) kein Header-File
Man könnte z.B. in main.c etwas anderes deklarieren als dann in average.c geschrieben wird.
Der Linker packt den Objektcode brav zu einer EXE zusammen. (nur wenn er kein Namemangling benützt)
Lässt man das Programm laufen, stürzt es ohne hilfreiche Meldung einfach ab.

Man bin ich froh, dass ich kein C programmieren muss, sondern Delphi hab. :P

Hybrid666 30. Sep 2010 17:14

AW: [C] Probleme mit Aufgabe und Variablen
 
Zitat:

Zitat von shmia (Beitrag 1053001)
Wenn ich das sehe, dann bekomme ich das kalte Grausen :lol:
Code:
extern void einlesen (float *, float *);
extern void average (float, float *);
extern void quotient (float, float *);
extern void produkt (float, float *);
extern float summe (float);
extern float differ (float);
und zwar deshalb:
1.) keine Parameternamen - somit sieht man nicht was übergeben werden soll
2.) kein Header-File
Man könnte z.B. in main.c etwas anderes deklarieren als dann in average.c geschrieben wird.
Der Linker packt den Objektcode brav zu einer EXE zusammen. (nur wenn er kein Namemangling benützt)
Lässt man das Programm laufen, stürzt es ohne hilfreiche Meldung einfach ab.

Man bin ich froh, dass ich kein C programmieren muss, sondern Delphi hab. :P

Mir kommt da auch das grauen, das kannst mir glauben. aber siehe aufgabe, das muss so gemacht werden und die teile von der main.c sind vorgegeben. ich hätte garnicht erst für einzeiler funktionen neue dateien angelegt (und wenn, dann in ne .c mit ner .h datei...). Aber ich kanns mir nicht aussuchen.

und ich code auch lieber in delphi ;) aber ich bin schon froh das wir kein java machen *gg* auch wenns anfangs wie C ist...

hoika 30. Sep 2010 19:22

AW: [C] Probleme mit Aufgabe und Variablen
 
Hallo,

so, nu Ruhe ;)

Klappt es denn jetzt ?


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz