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 ]
000
02.01.2004, 11:20 Uhr
~Lumina
Gast


Hallo zusammen,

also dieses Board ist echt gut gegliedert und besucht, darum hab ich gleich mal ein paar Fragen an irgendjemanden, der mir sie beantworten kann:

Was muss ich machen um C++Source in C-source zu übertragen? z.b. Die Beispiele mit der Determinantenberechnung und der Matrixinvertierung und auch die Lösung eines linearen Gleichungssystems.

Den C++Source, der hier im Board für diese Anwendung auffindbar ist, versteh ich so einigermaßen, aber ich soll es ja in C schreiben! Ich hab langsam echt keinen Nerv mehr!

Bitte, bitte helft mir auf die Sprünge!

sb@sonjabirner.de


Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
02.01.2004, 11:29 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Du musst alles "C++ige" in C übersetzen.

C kennt z.b kein std::cout usw, da kann man dann stattdessen z.b printf nehmen, etc
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
02.01.2004, 12:18 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


Wenn du auf die rätsel anspielst die ich da mal gemacht habe...
Um daraus c code zu machen musst du eigentlich nur die speicherallokierung ändern (malloc und free statt new und delete verwenden)
dann kann es noch sein das es teile dieser x?y:z konstrukte nicht mag
da musst du dann halt if(x)y; else z; draus machen....
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
02.01.2004, 14:58 Uhr
~Lumina
Gast


@ Windalf:

Ja, ich spiele auf deine Rätsel an. Ich habe auch vor allem Probleme mit der Matrixübergabe, d.h. es steht am Ende immer irgendwie 0 drin. Ich weiß, dass dabei nur die Adresse übergeben wird und dann die Werte an der übergebenen Adresse geändert werden. In der FH haben wir so etwas ähnliches mit Matrixaddition programmiert. Da hat es komischerweise gefunzt.

ich habe eine Headerdatei:


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

void MatrInv(int Rang, int mat[10][10], int matrixkosy[100]);
void DetBer();
void LoesLinGS();

void MatrEingabe(int Rang, int mat[10][10], int matrixkosy[100]);



das ist meine Funktionssammlung:


C++:
# include "Fkt_Sammlung.h"

  /****************************************************************/
  /* Funktion: DetBer                                             */
  /* Zweck:    Berechnung der Determinante einer Matrix           */
  /*                                                              */
  /****************************************************************/

void DetBer()
{
    printf(" Determinante berechnen!");
    getch();
}


  /****************************************************************/
  /* Funktion: LoesLinGS                                          */
  /* Zweck:    Loesung eines linearen Gleichungssystems           */
  /*                                                              */
  /****************************************************************/

void LoesLinGS()
{
    printf(" Lineares Gleichungssystem loesen!");
    getch();
}


  /****************************************************************/
  /* Funktion: MatrInv                                            */
  /* Zweck:    Bildung der Inversen einer Matrix                  */
  /*                                                              */
  /****************************************************************/

void MatrInv(int Rang, int mat[10][10], int matrixkosy[100])
{
    int UntDet1, UntDet2, UntDet3;
    int Determinante;

    printf("%d", matrixkosy[1]);
    printf("%d", matrixkosy[2]);
    printf("%d", matrixkosy[3]);
    printf("%d", matrixkosy[4]);
    printf("%d", matrixkosy[5]);
    printf("%d", matrixkosy[6]);
    printf("%d", matrixkosy[7]);
    printf("%d", matrixkosy[8]);
    printf("%d", matrixkosy[9]);

    UntDet1 = matrixkosy[5] * matrixkosy[9] - matrixkosy[6] * matrixkosy[8];
    UntDet2 = matrixkosy[1] * matrixkosy[9] - matrixkosy[3] * matrixkosy[7];
    UntDet3 = matrixkosy[1] * matrixkosy[5] - matrixkosy[2] * matrixkosy[4];

    Determinante = matrixkosy[1] * UntDet1 - matrixkosy[2] * UntDet2 + matrixkosy[3] * UntDet3;
    printf("Die Determinante ist:  %d", Determinante);

    getch();
}


  /****************************************************************/
  /* Funktion: MatrEingabe                                        */
  /* Zweck:    Eingabe einer Matrix zur späteren Bearbeitung      */
  /*                                                              */
  /****************************************************************/

void MatrEingabe(int Rang, int mat[10][10], int matrixkosy[100])
{
    int Spalte, Zeile;
    int n=1;

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

        }

}



und schließlich mein Main:

C++:
# include "Fkt_Sammlung.h"

const char Wahl_MatInv = '1',
           Wahl_DetBer = '2',
           Wahl_LinGlS = '3',
           WahlAbbruch = '4';


void main(void)
{
    char wahl;


    do
    {
    system("cls");
    printf("\n Waehlen Sie aus den folgenden Alternativen:\n"
           "        *********************************************************\n"
           "        *                                                       *\n"
           "        *  %c) Matrixinvertierung                               *\n"
           "        *  %c) Determinantenberechnung                          *\n"
           "        *  %c) Loesung eines linearen Gleichungssystems         *\n"
           "        *  %c) Abbruch                                          *\n"
           "        *                                                       *\n"
           "        *********************************************************\n\n",
    Wahl_MatInv, Wahl_DetBer, Wahl_LinGlS, WahlAbbruch);


    wahl=getch();
    printf("\n");

        switch(wahl)
        {
          case '1':  /* Matrixinvertierung */
            {
             int Rang;
             int mat[10][10]= {0};
        //     int Spalte, Zeile;
             int matrixkosy[100];

             printf(" \"Matrixinvertierung\" gewaehlt\n\n"
                    " Geben Sie den Rang/die Dimension der zu invertierenden Matrix an: ");            
             scanf("%d", &Rang);
            
             MatrEingabe(Rang, mat, matrixkosy);            
             MatrInv(Rang, mat, matrixkosy);      
                    
    /*         for (Spalte = 0; Spalte < Rang; Spalte++)
             {
                for (Zeile = 0; Zeile < Rang; Zeile++)
                {
                    printf("%d", UnterDetMat[Zeile][Spalte]);
                    printf("\n");
                }                                
                printf("\n");
             }  */

             getch();
             break;
            }

          case '2':  /* Determinantenberechnung */
            {
             printf(" \"Determinantenberechnung\" gewaehlt\n\n");
             DetBer();  
             break;
             }

          case '3':  /* Loesung eines linearen Gleichungssystems */
            {
             printf(" \"Loesung eines linearen Gleichungssystems\" gewaehlt\n\n");
             LoesLinGS();  
             break;
             }

          case '4':  /* Keine weiteren Aktionen. */
            {
             printf(" Abbruch!\n\n");
             break;
             }
          default:
            {
             printf("Fehlerhafte Auswahl!\n");  
             }
        } /* Ende des SWITCH */
    }
    while(wahl!=WahlAbbruch); /* Ende der DO-WHILE-Schleife */
}



und wenn du damit noch was anfangen kannst, dann bitte sag mir, was da falsch läuft...

mfg Lumina

Dieser Post wurde am 02.01.2004 um 15:44 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
02.01.2004, 15:11 Uhr
~Lumina
Gast


Also, ich hab jetzt mal versucht, deinen Code so anzupassen, wie du gesagt hast, aber dann bekomm ich diese Fehler:

Code:
:\Programme\DevStudio\MyProjects\TestProjekt\DeterminanteC.c(13) : error C2065: 'malloc' : nichtdeklarierter Bezeichner
C:\Programme\DevStudio\MyProjects\TestProjekt\DeterminanteC.c(13) : warning C4047: '=' : Anzahl der Dereferenzierungen bei 'double *' und 'int ' unterschiedlich
C:\Programme\DevStudio\MyProjects\TestProjekt\DeterminanteC.c(13) : error C2143: Syntaxfehler : Fehlendes ';' vor 'type'
C:\Programme\DevStudio\MyProjects\TestProjekt\DeterminanteC.c(18) : error C2065: 'free' : nichtdeklarierter Bezeichner
C:\Programme\DevStudio\MyProjects\TestProjekt\DeterminanteC.c(18) : error C2059: Syntaxfehler : ']'
C:\Programme\DevStudio\MyProjects\TestProjekt\DeterminanteC.c(27) : warning C4047: 'initializing' : Anzahl der Dereferenzierungen bei 'double *' und 'int ' unterschiedlich
C:\Programme\DevStudio\MyProjects\TestProjekt\DeterminanteC.c(27) : error C2143: Syntaxfehler : Fehlendes ';' vor 'type'
C:\Programme\DevStudio\MyProjects\TestProjekt\DeterminanteC.c(27) : error C2143: Syntaxfehler : Fehlendes ';' vor '['
C:\Programme\DevStudio\MyProjects\TestProjekt\DeterminanteC.c(27) : warning C4091: ' ' : Ignoriert auf der linken Seite von 'double ', wenn keine Variable deklariert wurde
C:\Programme\DevStudio\MyProjects\TestProjekt\DeterminanteC.c(45) : error C2059: Syntaxfehler : ']'
Fehler beim Ausführen von cl.exe.



Ganz so einfach ist es wohl doch nicht...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
02.01.2004, 15:46 Uhr
Pablo
Supertux
(Operator)


Du hast malloc.h nicht includiert. Ohne malloc.h sollte malloc, realloc, calloc.h und free funktionieren. In den Man Pages steht zwar, dass man stdhlib.h includieren muss, aber ich hab immer Ärger, wenn ich malloc.h vergesse zu includieren.

(Wegen den Compile.Fehler: Könntest du zeigen, an welchen Stellen des Source Codes die auftretten? Hier kann man nicht so gut die Zeilen zählen)
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 02.01.2004 um 15:48 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
02.01.2004, 15:52 Uhr
Hans
Library Walker
(Operator)


Hi,

wie Pablo gerade schon schrieb:
C++:
#include <malloc.h>
einfügen. Es könnte aber auch sein, das die Datei <alloc.h> heisst. Das ist (oder war) zumindest bei Micro$oft mal so.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 02.01.2004 um 15:53 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
02.01.2004, 16:33 Uhr
~Lumina
Gast


Danke erstmal an alle hier,
ich werde das jetzt gleich testen...

übrigens hat mein obiges Programm nix mit den Fehlern unten im zweiten Post zu tun, da hab ich nämlich nur versucht, den Source von Windalf von C++ in C zu übertragen... ging nicht so leicht wie man sieht.

Aber jetzt teste ich erst mal, dann check ich nochmal hier vorbei...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
02.01.2004, 16:45 Uhr
~Lumina
Gast


Also der Test sieht nicht sehr viel besser aus...

hab die Änderungen durchgeführt bei Windalf's Source, bekomme aber immer noch viele Fehler. Kann es sein, dass C ein Array so versteht:

matrix[10][10]

und C++ dann so:

matrix[10*10] ?????


Hier der Source:


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= malloc double[x*x];
                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=malloc double[3*3];

    //erste Zeile
    matrix[0]=1;
    matrix[1]=2;
    matrix[2]=-2;
    //zweite Zeile
    matrix[3]=1;
    matrix[4]=2;
    matrix[5]=1;
    //dritte Zeile
    matrix[6]=-1;
    matrix[7]=3;
    matrix[8]=1;

    if(det(matrix,3)==-15) printf("super scheint zu funktionieren\n");
    else printf("Pech gehabt nochmal versuchen\n");

    free [] matrix;
    return 0;
}




und die Fehler dazu sind:

Code:
C:\Programme\DevStudio\MyProjects\TestProjekt\DeterminanteC.c(14) : warning C4047: '=' : Anzahl der Dereferenzierungen bei 'double *' und 'void *(__cdecl *)(unsigned int )' unterschiedlich
C:\Programme\DevStudio\MyProjects\TestProjekt\DeterminanteC.c(14) : error C2143: Syntaxfehler : Fehlendes ';' vor 'type'
C:\Programme\DevStudio\MyProjects\TestProjekt\DeterminanteC.c(19) : error C2059: Syntaxfehler : ']'
C:\Programme\DevStudio\MyProjects\TestProjekt\DeterminanteC.c(28) : warning C4047: 'initializing' : Anzahl der Dereferenzierungen bei 'double *' und 'void *(__cdecl *)(unsigned int )' unterschiedlich
C:\Programme\DevStudio\MyProjects\TestProjekt\DeterminanteC.c(28) : error C2143: Syntaxfehler : Fehlendes ';' vor 'type'
C:\Programme\DevStudio\MyProjects\TestProjekt\DeterminanteC.c(28) : error C2143: Syntaxfehler : Fehlendes ';' vor '['
C:\Programme\DevStudio\MyProjects\TestProjekt\DeterminanteC.c(28) : warning C4091: ' ' : Ignoriert auf der linken Seite von 'double ', wenn keine Variable deklariert wurde
C:\Programme\DevStudio\MyProjects\TestProjekt\DeterminanteC.c(46) : error C2059: Syntaxfehler : ']'
Fehler beim Ausführen von cl.exe.

DeterminanteC.obj - 5 Fehler, 3 Warnung(en)

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
02.01.2004, 16:56 Uhr
Pablo
Supertux
(Operator)



Zitat:
~Lumina postete
Also der Test sieht nicht sehr viel besser aus...

hab die Änderungen durchgeführt bei Windalf's Source, bekomme aber immer noch viele Fehler. Kann es sein, dass C ein Array so versteht:

matrix[10][10]

und C++ dann so:

matrix[10*10] ?????



Nein. Das ist Windalfs Style. C verstehet matrix[10][10] genauso wie C++.
matrix[10][10] ist ein Quadratisches Scheme, das wäre die wirkliche Interpretation einer Matrix in der Programmierung. Das ist ein Block mit 10 x 10, das heißt 10 zeilen und 10 Spalten, also 100 Einträge.

matrix[10*10] ist ein Lineares Scheme, es ist nur ein Array mit der Dimension 100. Windalf mag keine 2 Dim. Arrays, also nimmt er ein 1-dim. Array, die genuaso viele Elemente speichern kann, wie die 2-dim. Variante. Man muss nur aufpassen, dass der Aufruf matrix[5][7] bei Windalf Version nicht erlaubt ist. Das ist wie die 5. Zahl der 7. Spalte (oder umgekehrt, wie du deine Matrix basteslt, ist egal). Bei Winfalds Versio wäre: matrix[5+10*7]. (oder matrix[7+10*5] falls du die Matrix andersrum gebaut hast)

Er könnte dir besser erklären, warum er die 1-dim. Variante nimmt. Ich glaube bei matrix[10][10] muss man immer Speicher allokieren, denn matrix[10][*] auf den Wald zeigt, da habe ich um ehrlich zu sein keine Ahnung. Wenn ich mehrdimensionalen Arrays brauche, dann deklariere ich immer als int ** matrix und arbeite dann mit malloc und free und hab dann keine Probleme, deshlab weiß ich es nicht.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 02.01.2004 um 16:59 Uhr von Pablo editiert.
 
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: