Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Seh nur noch Fehler...

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
29.06.2011, 13:04 Uhr
Trishi



Halli hallo,

bin nicht nur ein Forumsneuling sondern auch erst seit ein paar Wochen am programmieren

Leider klappt das ganze nicht so wie ich möchte und irgendwie bringe ich immer mehr Fehler ins Programm

Zuerst hatte ich ein Speicherzugriffsfehler und jetzt auch noch ein Bus-Zugriffsfehler und weiß überhaupt nicht, was ich machen soll oder wo der Fehler liegt.
Hoffe, ihr könnt mir helfen oder ein paar Tipps geben

Das Programm soll verschiedene Funktionen nach Wahl berechnen und dann das ganze mit GnuPlot plotten.

main.c:


C++:
#include<stdio.h>

void intervall(int a, int b);
int integrieren(int a, int b, int A);
void potenz();
void sinus();
void exponential();

int main(void)
{

int i, x[i], y[i], a, b, A;
char funktion;
FILE * datin;

    printf("Herzlich Willkommen\n");
    intervall(a,b);
    
do
{    printf("Welcher Funktionstyp soll betrachtet werden?\n1. (P)otenz\n2. (S)inus\n3. (E)xponential\n");
    scanf("%c", &funktion);
    getchar();
    
    switch(funktion)
        {
        case 'p': potenz(); break;
        case 's': sinus(); break;
        case 'e': exponential(); break;
        default: printf("Falsche Eingabe!\n");
        }
}
while(!(funktion=='p' || funktion=='s' || funktion=='e'));

    A=integrieren(a,b,A);
    printf("Das berechnete Integral beträgt:",A);

for(i=1;i<1000;i++)
{
    fscanf(datin,"%c","%c",x[i],y[i]);
}

    system("gnuplot grafik.gnu");
    printf("Auf Wiedersehen!");
    return 0;
}



intervall.c:


C++:
#include<stdio.h>

void intervall(int a, int b)
{

int i,x[i],dx;

    printf("Untere Intervallgrenze a?\n");
    scanf("%i",&a);
    getchar();

    printf("Obere Intervallgrenze b?\n");
    scanf("%i",&b);
    getchar();

    dx=(b-a)/999;

for    (i=1;i<1000;i++)
{
    x[i]=a+(i-1)*dx;
}
}



integrieren.c:


C++:
#include<stdio.h>

int integrieren(int a, int b, int A)

{

int i,x[i], y[1000], Summe, dx;

    dx=x[2]-x[1];
    Summe=0;

for    (i=1;i<1000;i++)
{
    Summe=Summe+y[i];
}
    
    A=(Summe-(y[1]/2)-(y[1000]/2))*dx;
    return A;
}



potenz.c:


C++:
#include<stdio.h>
#include<math.h>

void potenz()
{

int i,x[i],y[i];
float c,k;

        printf("Koeffizient C?\n");
        scanf("%f", &c);
        getchar();

        printf("Exponent k?\n");
        scanf("%f", &k);
        getchar();

        printf("Die Funktion lautet: %f *x^ %f ", c, k);

for     (i=1;i<1000;i++)
{
        y[i]=c*(pow(x[i],k));
}
}




Schon mal vielen Dank, wenn ihr euch die Mühe macht Patricia

Dieser Post wurde am 29.06.2011 um 13:05 Uhr von Trishi editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
29.06.2011, 15:02 Uhr
ao

(Operator)


Hi Patricia,

da ist ein ganzer Haufen Fehler.

Erstens:

C++:
int i, x[i], y[i], a, b, A;

Die Deklaration int x[i] ist zwar syntaktisch richtig (C99), aber das i ist nicht initialisiert, hat also einen zufälligen Wert. Auch die Länge der Arrays x und y ist damit zufällig. Das Drüberlaufen über die Arrays bis zum Index 1000 kann also zufällig funktionieren oder abstürzen oder (wenn i riesig ist) den Stack sprengen.

Zweitens:
Die x[i] und y[i] sind in allen Funktionen lokale Variablen. Die Wertzuweisungen, die du machst, wirken nicht nach außen und sind nach Verlassen der jeweiligen Funktion verloren. Damit sie ihre Werte behalten, musst du sie an einer Stelle global deklarieren.

Drittens:
Die Datei datin wird nicht geöffnet (fopen fehlt). Der FILE-Pointer ist nicht initialisiert, wenn er in fscanf verwendet wird. Das wird todsicher krachen.

Viertens:
x[i], y[i] und dx sollten vom Typ float oder double sein. Int-Werte können nur GANZE Zahlen speichern. Für die Intervallgrenzen und den Integralwert gilt dasselbe.

Es ist bestimmt noch mehr da.

Paar Hinweise noch:

Hat es einen Grund, dass du jede Funktion in eine eigene C-Datei schreibst? Wenn nein, dann pack sie doch alle in dieselbe Datei. Ist bei Projekten dieser Größe einfacher zu handhaben.

Und hast du eine IDE mit integriertem Debugger? Wenn ja, dann benutz ihn. Damit kannst du das Programm schrittweise durchlaufen und nach jeder Zeile die Variablen untersuchen und die Änderungen sehen.

Dieser Post wurde am 29.06.2011 um 15:09 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
29.06.2011, 17:34 Uhr
Trishi



Hallo, danke für die schnelle Antwort!

Versuche gleich mal deine Tipps umzusetzen. Hab mir schon gedacht, dass da viele Fehler drin sind :-/

Hab leider keine IDE sondern muss alles nur mitm vi schreiben und alles in seperaten Dateien. Über den Sinn kann man streiten
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
29.06.2011, 20:39 Uhr
Trishi



Manchmal sieht man den Wald vor lauter Bäumen nicht...
Jetzt funktioniert alles, besten Dank
 
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: