© Harry Broeders.
Deze pagina is bestemd voor studenten van de THRijswijk groepen EPm en EPv die de module SOPX1 volgen.
#include <stdio.h>#include <math.h>#define AANTAL 5int main() {int rooster[AANTAL][AANTAL];void invoerDriehoek(int c[AANTAL][AANTAL]);double omtrekDriehoek(int c[AANTAL][AANTAL]);invoerDriehoek(rooster);printf("De omtrek van de ingevoerde driehoek is: %.2lf", omtrekDriehoek(rooster));fflush(stdin);getchar();return 0;}void invoerDriehoek(int c[AANTAL][AANTAL]) {int i, x, y;for (y=0; y<AANTAL; ++y) {for (x=0; x<AANTAL; ++x) {c[y][x]=0;}}i=0;while (i<3) {do {printf("Geef de x coordinaat (0 t/m 4) van punt %d: ", i);while (scanf("%d", &x)!=1) {printf("Je moet een getal invoeren!\n");fflush(stdin);}}while (x<0 || x>4);do {printf("Geef de y coordinaat (0 t/m 4) van punt %d: ", i);while (scanf("%d", &y)!=1) {printf("Je moet een getal invoeren!\n");fflush(stdin);}}while (y<0 || y>4);if (c[y][x]==0) {c[y][x]=1;++i;}else {printf("Dit punt is al ingevoerd. Je moet 3 orginele punten invoeren!\n");}}}double omtrekDriehoek(int c[AANTAL][AANTAL]) {int xindex, yindex, pindex;struct {int x;int y;} punt[3];pindex=0;for (yindex=0; yindex<AANTAL; ++yindex) {for (xindex=0; xindex<AANTAL; ++xindex) {if (c[yindex][xindex]==1) {punt[pindex].x=xindex;punt[pindex].y=yindex;++pindex;}}}return sqrt(pow(punt[0].x-punt[1].x, 2.0)+pow(punt[0].y-punt[1].y, 2.0))+sqrt(pow(punt[1].x-punt[2].x, 2.0)+pow(punt[1].y-punt[2].y, 2.0))+sqrt(pow(punt[2].x-punt[0].x, 2.0)+pow(punt[2].y-punt[0].y, 2.0));}
Het gebruik van een 2 dimensionale array voor het opslaan van 3 punten is natuurlijk niet erg praktisch. In de praktijk zou het veel slimmer zijn om de drie hoekpunten op te slaan in een "gewone" array:
#include <stdio.h>#include <math.h>/* Hoekpunten wordt gedefinieerd als een array type met 3 elementen.Elk element is een struct met een x en een y waarde. */typedef struct {int x;int y;} Hoekpunten[3];int main() {Hoekpunten driehoek;void invoerDriehoek(Hoekpunten h);double omtrekDriehoek(Hoekpunten h);invoerDriehoek(driehoek);printf("De omtrek van de ingevoerde driehoek is: %.2lf", omtrekDriehoek(driehoek));fflush(stdin);getchar();return 0;}void invoerDriehoek(Hoekpunten h) {int i, j, orgineel;i=0;while (i<3) {printf("Geef de x coordinaat van punt %d: ", i);while (scanf("%d", &h[i].x)!=1) {printf("Je moet een getal invoeren!\n");fflush(stdin);}printf("Geef de y coordinaat van punt %d: ", i);while (scanf("%d", &h[i].y)!=1) {printf("Je moet een getal invoeren!\n");fflush(stdin);}orgineel=1;for (j=0; j<i; ++j) {if (h[j].x==h[i].x && h[j].y==h[i].y) {orgineel=0;}}if (orgineel==1) {++i;}else {printf("Dit punt is al ingevoerd. Je moet 3 orginele punten invoeren!\n");}}}double omtrekDriehoek(Hoekpunten h) {return sqrt(pow(h[0].x-h[1].x, 2.0)+pow(h[0].y-h[1].y, 2.0))+sqrt(pow(h[1].x-h[2].x, 2.0)+pow(h[1].y-h[2].y, 2.0))+sqrt(pow(h[2].x-h[0].x, 2.0)+pow(h[2].y-h[0].y, 2.0));}