Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Übertragung von C++source in C-source

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 ] > 2 < [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ 17 ] [ 18 ] [ 19 ] [ 20 ]
010
02.01.2004, 16:57 Uhr
~Lumina
Gast


-Anzahl der Dereferenzierungen bei 'double *' und 'void *(__cdecl *)(unsigned int )' unterschiedlich
-error C2143: Syntaxfehler : Fehlendes ';' vor 'type'

liefert diese Zeile:

C++:
h= malloc double[x*x];



error C2059: Syntaxfehler : ']'
liefert diese Zeile:

C++:
free []h;



-warning C4047: 'initializing' : Anzahl der Dereferenzierungen bei 'double *' und 'void *(__cdecl *)(unsigned int )' unterschiedlich

-error C2143: Syntaxfehler : Fehlendes ';' vor 'type'

-error C2143: Syntaxfehler : Fehlendes ';' vor '['

-warning C4091: ' ' : Ignoriert auf der linken Seite von 'double ', wenn keine Variable deklariert wurde

liefert diese Zeile:

C++:
double *matrix=malloc double[3*3];



und zu guter letzt:
- error C2059: Syntaxfehler : ']'

geliefert von dieser Zeile:



C++:
free [] matrix;

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
02.01.2004, 17:02 Uhr
Pablo
Supertux
(Operator)


Du benutzt free und malloc falsch.
Hier, Einträge der FAQ: malloc() & co, Die Sache mit den Rückgabewerten

malloc und free sind Funktionen, ich glaube, bei C++ sind new und delete Operatoren.

C++:
//C++ Variante
int main()
{
    int* array;
    array = new int[7];
    ...
    delete [] array;
}

//C Variante
int main()
{
    int* array;
    array = (int*) malloc(sizeof(int)*7);
    ...
    free(array);
}


--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 02.01.2004 um 17:06 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
02.01.2004, 19:16 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


ohne das jetzt zu testen...
probier mal so

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

double det(double*m,int n){
    double*h,r=m[0]*m[3]-m[1]*m[2];
    int i,j,k,x=n-1,b=1;
        if(n-2)
        {
            r=0;
            for(i=-1;++i<n;b=-b)
            {
                h=(double*)malloc(x*x*sizeof(double));
                for(j=0;j<x;j++)
                    for(k=0;k<x;k++)
                        h[k+j*n-j]=m[(k<i?0:1)+n+k+j*n];
                r+=b*m[ i ]*det(h,x);
                free(h);
            }
        }
    return r;
}

int main(){
double matrix[]={1,2,-2,1,2,1,-1,3,1};
if(det(matrix,3)==-15) printf("super scheint zu funktionieren\n");
else printf("Pech gehabt nochmal versuchen\n");
return 0;
}


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
03.01.2004, 15:11 Uhr
~Lumina
Gast


Jippie!

Der Source funktioniert ohne Murren, Windalf! 0 Fehler, 0 Warnungen!
Danke Windalf, danke Pablo, danke Hans...

Jetzt fällt mir ein Stein vom Herzen, v.a. weil ich schon wieder krank werde und noch so viel zu tun ist.

Hoffentlich krieg ich jetzt wenigstens auf die Reihe, das in mein großes Matheprogramm einzubinden...

Aber ich "kenne" ja jetzt ein paar echt nette, hilfsbereite Programmierer, die immer da sind

Danke an alle!!

P.S.: Vielleicht sollte ich mich wenn das alles vorbei ist, auch in diesem Board anmelden...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
03.01.2004, 15:31 Uhr
(un)wissender
Niveauwart


Warum nicht jetzt...Windalf ist schließlich auch hier!
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
03.01.2004, 16:11 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@Lumina

Also wenn du denn Code nur einfach 1:1 kopierst, wirst du glaub ich nicht viel Freude dran haben. Zum einen ist der noch ziemlich kryptisch, weils ja ein Golfrätsel war, der Lernerfolg geht ja auch so ziemlich gegen Null.
Mal ganz davon abgesehen ob ich überhaupt Determinante richtig definiert habe....

Zum anderen werden ja überhaupt keine Fehler abgefangen.... Es funktioniert z.b. nur für n>2.....

wirklich getest habe ich da auch nichts ich hab das nur auf auf die schnelle so hingeproggt, da können noch massenweise kleine fehlerchen drin sein, ich würde mich da an deiner stelle auf nichts verlassen...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
03.01.2004, 18:11 Uhr
(un)wissender
Niveauwart


Jeder der Windows benutzt kennt das, es funzt nur für n > 2 (Installationen pro Monat) und selbst darauf kann man sich nicht verlassen.
Fehler abfangen?!
Wozu ist Windows in C?
Errorcodes kann man ignorieren und außerdem machen die zusätzlichen Abfragen den Code nur unnötig langsam.
Cheers!
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
03.01.2004, 18:21 Uhr
0xdeadbeef
Gott
(Operator)


Ah ja, man erinnert sich doch immer wieder mit Schaudern an die MFC mit ihren ellenlangen ASSERT()-Reihen und Debug-Versionen, die sich anders verhalten als Releases. Das hat aber weniger mit C als mit der Unfähigkeit der Microsoft-Coder zu tun. Ich hab doch bestimmt schon mal erwähnt, dass MS Excel fest davon überzeugt ist, dass 1900 ein Schaltjahr gewesen sei?
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
03.01.2004, 18:40 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


1900 kein schaltjahr? echt? mist, etz muss ich meinen kalender wieder umstellen
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
04.01.2004, 14:09 Uhr
~Lumina
Gast


Ich weiß, dass copy und paste nicht das Wahre ist, aber ich muss erst mal weiter kommen, hab momentan sowieso den vollen Brummschädel... sollte eigentlich im Bett bleiben.

Hab leider noch ein Problem...
also ich will ja nicht nur eine Matrixdeterminante berechnen, sondern diese vom Benutzer eingeben lassen, möglichst nach Zeilen und Spalten sortiert. Das Problem dabei ist, dass dann immer dieselbe Ausgabe erzeugt wird. Wenn ich die Matrix fest vorgebe, funzt alles perfekt, zumindest soweit ich bin.

Meine Headerdatei sieht nun so aus:

C++:
# include <stdio.h>
# include <conio.h>
# include <stdlib.h>
# include <malloc.h>

void MatrInv();
double Det(double*matrix, int Rang);
void LoesLinGS();
void EingabeDerMatrix(double mat[100], int Rang);



Die Funktion für die Eingabe der Matrix so:

C++:
void EingabeDerMatrix(double*matrix, int Rang)
{
    int Spalte, Zeile;
    int n=0;

    for (Spalte = 0; Spalte < Rang; Spalte++)
        for (Zeile = 0; Zeile < Rang; Zeile++)
        {
            printf("%d. Zeile, %d. Spalte: ", Zeile+1, Spalte+1);
            scanf("%f", &matrix[n]);
            n++;
        }
}



Hier soll die Determinante berechnet werden:

C++:
double Det(double*matrix, int Rang)
{
    double*h,r=matrix[0]*matrix[3]-matrix[1]*matrix[2];
    int i, j, k, x = Rang-1, b = 1;
        if(Rang-2)
        {
            r = 0;
            for(i = -1; ++i<Rang; b = -b)
            {
                h=(double*)malloc(x*x*sizeof(double));
                for(j=0; j<x; j++)
                    for(k=0;k<x;k++)
                        h[k+j * Rang-j] = matrix[(k<i?0:1) + Rang + k + j*Rang];
                r+= b * matrix[i] * Det(h,x);
                free(h);
            }
        }
    return r;
}



und schließlich der Ausschnitt aus meinem main:

C++:
case '2':  /* Determinantenberechnung */
{
    int Rang;
    double mat[100];

    //double mat[]={1,2,-2, 1,2,1, -1,3,1}; // später weg!!

    printf(" \"Determinantenberechnung\" gewaehlt\n\n"
        " Geben Sie den Rang/die Dimension der Matrix an, von der die"
                    " Determinante\n berechnet werden soll: ");
    scanf("%d", &Rang);

    EingabeDerMatrix(mat, Rang);

    printf("\n Die Determinante der Matrix ist: %f", Det(mat,Rang));
    getch();
    break;
}



wenn ich die Funkton Det mit dem auskommentierten "double mat..." verwende, liefert sie mir das richtige Ergebnis. Also: Der Fehler liegt wohl an der Eingabefunktion. Nur, wo?

Und noch was: Warum packt C keine const char bei mir?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ 17 ] [ 18 ] [ 19 ] [ 20 ]     [ 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: