van hoofd naar sub programma

Status
Niet open voor verdere reacties.

bakkertje00

Gebruiker
Lid geworden
6 jan 2007
Berichten
11
Hallo allemaal,

Ik heb een programma gemaakt waar wat moeilijke berekenengen in staan. heb alles gedeclareerd in het hoofd programma en in het sub programma wordt alles berekend. Alleen nou heb ik de uitkomst weer nodig in het hoofd programma. HOE DOE IK DIT? ben er al een tijdje mee bezig maar het lukt me niet.:( :(

Please help,

Bakkertje
 
Hallo allemaal,
heb alles gedeclareerd in het hoofd programma en in het sub programma wordt alles berekend.
Programma of functie?

Voorbeeld van een functie:
Code:
int Bereken(int,int,int);

int main()
{
    printf("%d", Bereken(2,3,4))  //hier wordt de functie aangeroepen
    return 0;
}

//functie om de 3 getallen op te tellen
int Bereken(int a, int b, int c)
{

return a + b + c;  // geef de waarde terug van de uitkomst

}

groeten Niek
 
geloof dat Niek wel je bedoeling te pakken heeft, maar misschien kun je iets specifieker zijn over je bedoelingen (stukje code ofzo)

t moraal van het verhaal is iig grotendeels 'Scope'

Dit bereik je idd met behulp van headers. zowel zoals Niek het voordoet, als met .h files wat feitelijk op het zelfde neerkomt...

Daarnaast is het een kunst om goed om te springen met je parameters. Als je goed je parameters in functies zet (nadenken over wat je waar nodig hebt), maakt dat je leven een stuk makkelijker.
Daarnaast vergeten een heleboel dat een functie een (erg diverse) return value kan aannemen.

Dus, let op je return values, je parameters, en DAN pas op je headers (bepaal aan de hand van je pars/returns je uiteindelijk benodigde scope). Ga dus niet blindelings alles wat buiten je scope valt headeren, dan krijg je al gauw een rotzooi in je global scope
 
Ik zal effe mijn programma posten. kwa opbouw ziet het er nog niet uit moet ik allemaal nog goed zetten.

/*================================================


================================================*/

#include <iostream>
#include <cmath>
#include <cstdlib>
#include <conio.h>
#include <stdio.h>
#include <time.h>
#include <windows.h>
#include <string.h>

//#include "serial.h"

// Flow control flags

#define FC_DTRDSR 0x01
#define FC_RTSCTS 0x02
#define FC_XONXOFF 0x04
//#include <tarray.h>
using namespace std;
BOOL bPortReady;
DCB dcb;
COMMTIMEOUTS CommTimeouts;
BOOL bWriteRC;
BOOL bReadRC;
DWORD iBytesWritten;
DWORD iBytesRead;

HANDLE SerialInit(char *ComPortName, int BaudRate)
{
HANDLE hCom;

hCom = CreateFile(ComPortName,
GENERIC_READ | GENERIC_WRITE,
0, // exclusive access
NULL, // no security
OPEN_EXISTING,
0, // no overlapped I/O
NULL); // null template

bPortReady = SetupComm(hCom, 2, 128); // set buffer sizes


bPortReady = GetCommState(hCom, &dcb);
dcb.BaudRate = BaudRate;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
//dcb.Parity = EVENPARITY;
dcb.StopBits = ONESTOPBIT;
dcb.fAbortOnError = TRUE;

// set XON/XOFF
dcb.fOutX = FALSE; // XON/XOFF off for transmit
dcb.fInX = FALSE; // XON/XOFF off for receive
// set RTSCTS
dcb.fOutxCtsFlow = false; // turn on CTS flow control
dcb.fRtsControl = RTS_CONTROL_HANDSHAKE; //
// set DSRDTR
dcb.fOutxDsrFlow = FALSE; // turn on DSR flow control
//dcb.fDtrControl = DTR_CONTROL_ENABLE; //
dcb.fDtrControl = DTR_CONTROL_DISABLE; //
// dcb.fDtrControl = DTR_CONTROL_HANDSHAKE; //

bPortReady = SetCommState(hCom, &dcb);

// Communication timeouts are optional

bPortReady = GetCommTimeouts (hCom, &CommTimeouts);

CommTimeouts.ReadIntervalTimeout = 5000;
CommTimeouts.ReadTotalTimeoutConstant = 5000;
CommTimeouts.ReadTotalTimeoutMultiplier = 1000;
CommTimeouts.WriteTotalTimeoutConstant = 5000;
CommTimeouts.WriteTotalTimeoutMultiplier = 1000;

bPortReady = SetCommTimeouts (hCom, &CommTimeouts);

return hCom;
}

char SerialGetc(HANDLE *hCom)

{


char rxchar;
BOOL bReadRC;
static DWORD iBytesRead;

bReadRC = ReadFile(*hCom, &rxchar, 1, &iBytesRead, NULL);

return rxchar;
}

void SerialPutc(HANDLE *hCom, char txchar)
{
char bWriteRC;
static DWORD iBytesWritten;

bWriteRC = WriteFile(*hCom, &txchar, 1, &iBytesWritten,NULL);

return;
}





/*================================================= =====
Function to multiply matrix
================================================== ===*/
void mmult (int rows, int cols, int rows1, int cols1,int result, double m1[][4], double m2[][4], double m3[][4], double m4[][4], double m5[][4],double m6[][4], double m7[][4], double m8[][4], double m9[][4], double m10[][4],double mk1[][4])
{
double m11[4][4];//holds the result of A * B
double m12[4][4];//holds the result of AB * C
double m13[4][4];//holds the result of ABC * D
double m14[4][4];//holds the result of ABCD * E
double m15[4][4];//holds result of been 1
double m16[4][4];//holds the result of A * B
double m17[4][4];//holds the result of AB * C
double m18[4][4];//holds the result of ABC * D
double m19[4][4];//holds the result of ABCD * E
double m20[4][4];//holds result of been 2
double m21[4][4];//holds result of been totaal



{ //double result = mk1[0][0] - mk1[0][0];
}
for (int i=0; i<rows; i++)
{
for (int j=0; j<cols; j++)
{
double val = 0;
for (int k=0; k<cols; k++)
{
val = val + m1[k] * m2[k][j];
}
m11[j] = val;
}
}
for (int i=0; i<rows; i++)
{
for (int j=0; j<cols; j++)
{
double val = 0;
for (int k=0; k<cols; k++)
{
val = val + m11[k] * m3[k][j];
}
m12[j] = val;
}
}
for (int i=0; i<rows; i++)
{
for (int j=0; j<cols; j++)
{
double val = 0;
for (int k=0; k<cols; k++)
{
val = val + m12[k] * m4[k][j];
}
m13[j] = val;
}
}
for (int i=0; i<rows; i++)
{
for (int j=0; j<cols; j++)
{
double val = 0;
for (int k=0; k<cols; k++)
{
val = val + m13[k] * m5[k][j];
}
m14[j] = val;
}
}

for (int i=0; i<rows; i++)
{
for (int j=0; j<cols; j++)
{
double val = 0;
for (int k=0; k<cols; k++)
{
val = val + m14[k] * mk1[k][j];
}
m15[j] = val;
}
}

for (int i=0; i<rows; i++)
{
for (int j=0; j<cols; j++)
{
double val = 0;
for (int k=0; k<cols; k++)
{
val = val + m6[k] * m7[k][j];
}
m16[j] = val;
}
}
for (int i=0; i<rows; i++)
{
for (int j=0; j<cols; j++)
{
double val = 0;
for (int k=0; k<cols; k++)
{
val = val + m16[k] * m8[k][j];
}
m17[j] = val;
}
}
for (int i=0; i<rows; i++)
{
for (int j=0; j<cols; j++)
{
double val = 0;
for (int k=0; k<cols; k++)
{
val = val + m17[k] * m9[k][j];
}
m18[j] = val;
}
}
for (int i=0; i<rows; i++)
{
for (int j=0; j<cols; j++)
{
double val = 0;
for (int k=0; k<cols; k++)
{
val = val + m18[k] * m10[k][j];
}
m19[j] = val;
}

}
for (int i=0; i<rows; i++)
{
for (int j=0; j<cols; j++)
{
double val = 0;
for (int k=0; k<cols; k++)
{
val = val + m19[k] * mk1[k][j];
}
m20[j] = val;
}

{

result=m20[0][0] - m15[0][0];
}

}


{ cout<<result;
cout<<"\n";

}


//print matrix 11
for (int i=0; i<rows; i++)
{
for (int j=0; j<cols; j++)
{
cout<<" "<<m11[j];


}
cout<<"\n";
}
cout<<"\n";
//print matrix 12
for (int i=0; i<rows; i++)
{
for (int j=0; j<cols; j++)
{
cout<<" "<<m12[j];


}
cout<<"\n";
}
cout<<"\n";
//print matrix 13
for (int i=0; i<rows; i++)
{
for (int j=0; j<cols; j++)
{
cout<<" "<<m13[j];


}
cout<<"\n";

}
cout<<"\n";
//print matrix 14
for (int i=0; i<rows; i++)
{
for (int j=0; j<cols; j++)
{
cout<<" "<<m14[j];


}
cout<<"\n";
}
cout<<"\n";
//print matrix 15
for (int i=0; i<rows1; i++)
{
for (int j=0; j<cols1; j++)
{
cout<<" "<<m15[j];


}
cout<<"\n";
}
cout<<"\n";
//print matrix 15
for (int i=0; i<rows1; i++)
{
for (int j=0; j<cols1; j++)
{
cout<<" "<<m20[j];


}
cout<<"\n";
}

cout<<"\n";

}
//Function declarations
void mmult(int,int,int,int,int,double[][4],double[][4],double[][4],double[][4],double[][4],double[][4],double[][4],double[][4],double[][4],double[][4],double[][4]);

int main()
{
double a;
double b;
double c;
double d;
double e;
double f;
double g;
double h;
double i;
double j;
//double result;
int stuur;

cout<<"geef waarde in voor a";
cin >> a;
cout<< endl;

cout<<"geef waarde in voor b";
cin >> b;
cout<< endl;

cout<<"geef waarde in voor c";
cin >> c;
cout<< endl;

cout<<"geef waarde in voor d";
cin >> d;
cout<< endl;

cout<<"geef waarde in voor e";
cin >> e;
cout<< endl;

cout<<"geef waarde in voor f";
cin >> f;
cout<< endl;

cout<<"geef waarde in voor g";
cin >> g;
cout<< endl;

cout<<"geef waarde in voor h";
cin >> h;
cout<< endl;

cout<<"geef waarde in voor i";
cin >> i;
cout<< endl;

cout<<"geef waarde in voor j";
cin >> j;
cout<< endl;


//Hard code matrix A
double m1[4][4] = {{(cos(a)),0,(-sin(a)),0},
{0,1,0,0},
{(sin(a)),0,(cos(a)),0},
{0,0,0,1}};

//Hard code matrix B
double m2[4][4] = {{cos(b),-sin(b),0,(1-cos(b))*42.7},
{sin(b),cos(b),0,(-sin(b))*42.70},
{0,0,1,0},
{0,0,0,1}};
//Hard code matrix C
double m3[4][4] = {{cos(c),-sin(c),0,(1-cos(c))*(42.7+57.2)},
{sin(c),cos(c),0,(-sin(c))*(42.7+57.2)},
{0,0,1,0},
{0,0,0,1}};
//Hard code matrix D
double m4[4][4] = {{cos(d),-sin(d),0,(1-cos(d))*(42.7+57.2+42.7)},
{sin(d),cos(d),0,(-sin(d))*(42.7+57.2+42.7)},
{0,0,1,0},
{0,0,0,1}};
//Hard code matrix E
double m5[4][4] = {{cos(e),0,-sin(e),(1-cos(e))*(42.7+57.2+42.7+42.7)},
{0,1,0,0},
{sin(e),0,cos(e),(-sin(e))*(42.7+57.2+42.7+42.7)},
{0,0,0,1}};


//Hard code matrix f
double m6[4][4] = {{(cos(f)),0,(-sin(f)),0},
{0,1,0,0},
{(sin(f)),0,(cos(f)),0},
{0,0,0,1}};

//Hard code matrix g
double m7[4][4] = {{cos(g),-sin(g),0,(1-cos(g))*42.7},
{sin(g),cos(g),0,(-sin(g))*42.70},
{0,0,1,0},
{0,0,0,1}};
//Hard code matrix h
double m8[4][4] = {{cos(h),-sin(h),0,(1-cos(h))*(42.7+57.2)},
{sin(h),cos(h),0,(-sin(h))*(42.7+57.2)},
{0,0,1,0},
{0,0,0,1}};
//Hard code matrix i
double m9[4][4] = {{cos(i),-sin(i),0,(1-cos(i))*(42.7+57.2+42.7)},
{sin(i),cos(i),0,(-sin(i))*(42.7+57.2+42.7)},
{0,0,1,0},
{0,0,0,1}};
//Hard code matrix j
double m10[4][4] = {{cos(j),0,-sin(j),(1-cos(j))*(42.7+57.2+42.7+42.7)},
{0,1,0,0},
{sin(j),0,cos(j),(-sin(j))*(42.7+57.2+42.7+42.7)},
{0,0,0,1}};

double mk1[4][4] = {{228},
{0},
{0},
{1}};

int result();

//call function
mmult(4,4,4,1,result,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,mk1);


//Where '3' is the maximum number of rows in either
//matrix A or B
//and '4' is the maximun number of columns in either
//matrix A or B

if (result >= 0 && result <= 10 )
{
stuur=49;
}
if (result > 10 && result <= 20 )
{
stuur=50;
}
if (result > 20 && result <= 30 )
{
stuur=51;
}
if (result >= -10 && result <= 0 )
{
stuur=49;
}
if (result > -20 && result <= -10 )
{
stuur=50;
}
if (result > -30 && result <= -20 )
{
stuur=51;
}
{

HANDLE my=SerialInit("com1",9600);
char letter;


HANDLE *ptr;
ptr = &my;

SerialPutc(ptr,stuur);

letter=SerialGetc(ptr);
cout<<stuur;
cout<<"\n";
cout << "Gestuurd is: ";
cout << letter;
cout<<"\n";
cout << result;

}
cin.get();
cin.get();

return 0;
}

Het gaat om de functie result!!!
 
STUKJE code ......
:)

iig ff paar dingen, splits de files, h's cpp's, declaraties, functies

misschien handig

double a;
double b;
double c;

kan ook

double a,b,c;

en voor je if-structuur, kan een switch behoorlijk handig zijn

if ( x == 0 ) ..
if ( x == 1 ) ..
if ( x == 2 ) ..

wordt

switch (x)
{
case 0: ..... break;
case 1: ..... break;
case 2: ..... break;
}
let op ':' ipv ';' achter case
 
Laatst bewerkt:
haha ja!

Maar Het gaat in princiepe erom dat ik die result kan gebruiken van mijn sub. Zoals ik het nu heb zijn er twee verschillende waardes voor result in het hoofd en in de sub, die in het hoofd is altijd 0 dus!!
 
wat is result ? een functie ?
geloof t niet..... tenminste vindt er zo geen body van... alleen een headertje
volgens mij (zonder die hele lap door te lopen ;)) wil je iets als het volgende

functie1 ()
{
int result = ....
}


functie2 ()
{
int result = ....
}


waar beide results met elkaar in overeenstemming blijven.....
of niet?
 
Laatst bewerkt:
Ja dat wil ik voor elkaar krijgen!
Dan is de eerste het hoofd programma en de tweede de sub!
 
makkelijk zat

alleen wel een global... misschien dat je dat nog wil wegpakken in een struct of class ergens..

int result;

functie1 ()
{
result = ....
}

functie2
{
result = ...
}

nu zet je steeds 1 en dezelfde int (result) ipv van 2
 
Als ik dat doe dan geeft hij aan in het sub programma dat hij undeclared is en (first use this function) terwijl ik hem wel hij wel aangeroept is in de main
 
wat is je sub-programma ? en wat is main-programma ?
bedoel je daarmee functies?

functie sub ()
{}

functie main ()
{}

zo ja, staan ze beide in dezelfde cpp?
zo ja, zorg dat int result boven beiden staat (als hij boven 1 staat en onder de ander werkt hij ook alleen maar in 1 en is undeclared in de ander)

staan ze in aparte cpp's?
zo ja, declareer int result in de h file die je bij beide cpp's include
 
Ja dat heb ik gedaan, maar dan heb ik het probleem dat hij ze allebij apart ziet en dus andere waarde! gewoon wat er in het geheugen staat.
 
Ja dat heb ik gedaan, maar dan heb ik het probleem dat hij ze allebij apart ziet en dus andere waarde! gewoon wat er in het geheugen staat.
wat heb je gedaan ? declaratie in de h?
ze allebei apart zien kan niet meer.... er zijn geen 2, er is dan maar 1 int result..

maak niet de volgende fout...

int result;
functie_sub()
{
int result ; // een nieuwe int declareren
}

functie_sub()
{
int result ; // een nieuwe int declareren
}

dan heb je 3 ints... alle drie anders..
(compiler zou dat ook niet toe moeten laten, maar zou kunnen binnen de compiler opties, wellicht een warning???)

zorg dat je maar 1 x het woordje 'int' hebt staan
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan