Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- #include <Windows.h>
- struct Vertex {
- float x;
- float y;
- };
- struct Triangle {
- struct Vertex a;
- struct Vertex b;
- struct Vertex c;
- };
- struct TrianglePair {
- struct Triangle triangleA;
- struct Triangle triangleB;
- };
- void saveIntoFile(FILE* file, struct TrianglePair triangle) {
- fprintf(file, "Dvoika s triugulnici: \n");
- fprintf(file, "Triugulnik 1: A(%f, %f), B(%f, %f), C(%f, %f): ", triangle.triangleA.a.x, triangle.triangleA.a.y,
- triangle.triangleA.b.x, triangle.triangleA.b.y, triangle.triangleA.c.x, triangle.triangleA.c.y);
- fprintf(file, "Triugulnik 2: A(%f, %f), B(%f, %f), C(%f, %f): ", triangle.triangleB.a.x, triangle.triangleB.a.y,
- triangle.triangleB.b.x, triangle.triangleB.b.y, triangle.triangleB.c.x, triangle.triangleB.c.y);
- }
- void findThePairsWithEqualTriangles(struct TrianglePair triangles[], int numberOfTriangles) {
- // For the first triangle from the pair
- float sideAAB;
- float sideABC;
- float sideAAC;
- // For the second triangle from the pair
- float sideBAB;
- float sideBBC;
- float sideBAC;
- // Zapis na informaciqta vuv faila
- char fileName[30];
- printf("Ime na faila, v koito shte se zapishe informaciqta: ");
- scanf("%s", &fileName);
- FILE* file = fopen(fileName, "w");
- if(file == NULL) {
- printf("Greshka pri otvarqneto na faila %s", fileName);
- return;
- }
- for(int i = 0; i < numberOfTriangles; i++) {
- // Za purviq triugulnik v dvoikata
- float axSq = (triangles[i].triangleA.a.x - triangles[i].triangleA.b.x) * (triangles[i].triangleA.a.x - triangles[i].triangleA.b.x);
- float aySq = (triangles[i].triangleA.a.y - triangles[i].triangleA.b.y) * (triangles[i].triangleA.a.y - triangles[i].triangleA.b.y);
- // Triangle 1, side AB
- sideAAB = sqrt(axSq + aySq);
- float bxSq = (triangles[i].triangleA.b.x - triangles[i].triangleA.c.x) * (triangles[i].triangleA.b.x - triangles[i].triangleA.c.x);
- float bySq = (triangles[i].triangleA.b.y - triangles[i].triangleA.c.y) * (triangles[i].triangleA.b.y - triangles[i].triangleA.c.y);
- // Triangle 1, side BC
- sideABC = sqrt(bxSq + bySq);
- float cxSq = (triangles[i].triangleA.b.x - triangles[i].triangleA.c.x) * (triangles[i].triangleA.b.x - triangles[i].triangleA.c.x);
- float cySq = (triangles[i].triangleA.b.y - triangles[i].triangleA.c.y) * (triangles[i].triangleA.b.y - triangles[i].triangleA.c.y);
- // Triangle 1, side AC
- sideAAC = sqrt(cxSq + cySq);
- // Za vtoriq triugulnik v dvoikata
- float triangleBaxSq = (triangles[i].triangleB.a.x - triangles[i].triangleB.b.x) * (triangles[i].triangleB.a.x - triangles[i].triangleB.b.x);
- float triangleBaySq = (triangles[i].triangleB.a.y - triangles[i].triangleB.b.y) * (triangles[i].triangleB.a.y - triangles[i].triangleB.b.y);
- // Triangle 2, side AB
- sideBAB = sqrt(triangleBaxSq + triangleBaySq);
- float triangleBbxSq = (triangles[i].triangleB.b.x - triangles[i].triangleB.c.x) * (triangles[i].triangleB.b.x - triangles[i].triangleB.c.x);
- float triangleBbySq = (triangles[i].triangleB.b.y - triangles[i].triangleB.c.y) * (triangles[i].triangleB.b.y - triangles[i].triangleB.c.y);
- // Triangle 2, side BC
- sideBBC = sqrt(triangleBbxSq + triangleBbySq);
- float triangleBcxSq = (triangles[i].triangleB.b.x - triangles[i].triangleB.c.x) * (triangles[i].triangleB.b.x - triangles[i].triangleB.c.x);
- float triangleBcySq = (triangles[i].triangleB.b.y - triangles[i].triangleB.c.y) * (triangles[i].triangleB.b.y - triangles[i].triangleB.c.y);
- // Triangle 1, side AC
- sideBAC = sqrt(triangleBcxSq + triangleBcySq);
- if(sideAAB == sideABC && sideAAB == sideAAC && sideBAB == sideBBC && sideBAB == sideBAC) {
- saveIntoFile(file, triangles[i]);
- printf("Dvoikata e ravnostranna i e zapisana vuv faila!");
- }
- }
- fclose(file);
- }
- void findThePairsWithEqualSidedTriangles(struct TrianglePair triangles[], int numberOfTriangles) {
- // For the first triangle from the pair
- float sideAAB;
- float sideABC;
- float sideAAC;
- // For the second triangle from the pair
- float sideBAB;
- float sideBBC;
- float sideBAC;
- // Zapis na informaciqta vuv faila
- char fileName[30];
- printf("Ime na faila, v koito shte se zapishe informaciqta: ");
- scanf("%s", &fileName);
- FILE* file = fopen(fileName, "w");
- if(file == NULL) {
- printf("Greshka pri otvarqneto na faila %s", fileName);
- return;
- }
- for(int i = 0; i < numberOfTriangles; i++) {
- // Za purviq triugulnik v dvoikata
- float axSq = (triangles[i].triangleA.a.x - triangles[i].triangleA.b.x) * (triangles[i].triangleA.a.x - triangles[i].triangleA.b.x);
- float aySq = (triangles[i].triangleA.a.y - triangles[i].triangleA.b.y) * (triangles[i].triangleA.a.y - triangles[i].triangleA.b.y);
- // Triangle 1, side AB
- sideAAB = sqrt(axSq + aySq);
- float bxSq = (triangles[i].triangleA.b.x - triangles[i].triangleA.c.x) * (triangles[i].triangleA.b.x - triangles[i].triangleA.c.x);
- float bySq = (triangles[i].triangleA.b.y - triangles[i].triangleA.c.y) * (triangles[i].triangleA.b.y - triangles[i].triangleA.c.y);
- // Triangle 1, side BC
- sideABC = sqrt(bxSq + bySq);
- float cxSq = (triangles[i].triangleA.a.x - triangles[i].triangleA.c.x) * (triangles[i].triangleA.a.x - triangles[i].triangleA.c.x);
- float cySq = (triangles[i].triangleA.a.y - triangles[i].triangleA.c.y) * (triangles[i].triangleA.a.y - triangles[i].triangleA.c.y);
- // Triangle 1, side AC
- sideAAC = sqrt(cxSq + cySq);
- // Za vtoriq triugulnik v dvoikata
- float triangleBaxSq = (triangles[i].triangleB.a.x - triangles[i].triangleB.b.x) * (triangles[i].triangleB.a.x - triangles[i].triangleB.b.x);
- float triangleBaySq = (triangles[i].triangleB.a.y - triangles[i].triangleB.b.y) * (triangles[i].triangleB.a.y - triangles[i].triangleB.b.y);
- // Triangle 2, side AB
- sideBAB = sqrt(triangleBaxSq + triangleBaySq);
- float triangleBbxSq = (triangles[i].triangleB.b.x - triangles[i].triangleB.c.x) * (triangles[i].triangleB.b.x - triangles[i].triangleB.c.x);
- float triangleBbySq = (triangles[i].triangleB.b.y - triangles[i].triangleB.c.y) * (triangles[i].triangleB.b.y - triangles[i].triangleB.c.y);
- // Triangle 2, side BC
- sideBBC = sqrt(triangleBbxSq + triangleBbySq);
- float triangleBcxSq = (triangles[i].triangleB.a.x - triangles[i].triangleB.c.x) * (triangles[i].triangleB.a.x - triangles[i].triangleB.c.x);
- float triangleBcySq = (triangles[i].triangleB.a.y - triangles[i].triangleB.c.y) * (triangles[i].triangleB.a.y - triangles[i].triangleB.c.y);
- // Triangle 2, side AC
- sideBAC = sqrt(triangleBcxSq + triangleBcySq);
- printf("\nTriugulnik 1 ot dvoikata \n");
- printf("Duljinata AB: %f\n", sideAAB);
- printf("Duljinata BC: %f\n", sideABC);
- printf("Duljinata AC: %f\n", sideAAC);
- printf("Triugulnik 2 ot dvoikata \n");
- printf("Duljinata AB: %f\n", sideBAB);
- printf("Duljinata BC: %f\n", sideBBC);
- printf("Duljinata AC: %f\n", sideBAC);
- if(sideAAB == sideABC || sideAAB == sideAAC || sideABC == sideAAC) {
- printf("Triugulnika e ravnobedren!\n");
- saveIntoFile(file, triangles[i]);
- } else {
- if(sideBAB == sideBBC || sideBAB == sideBAC || sideBBC == sideBAC) {
- printf("Triugulnik B e ravnobedren!\n");
- saveIntoFile(file, triangles[i]);
- } else {
- printf("Nqma ravnobedreni!\n");
- }
- }
- }
- fclose(file);
- }
- int menu() {
- int choice;
- printf("1.Namirane na dvoikite triugulnici, v koito i dvata triugulnika sa ravnostranni.\n");
- printf("2.Namirane na dvoikite triugulnici, v koito ima samo edin ravnobedren triugulnik.");
- printf("Molq, izberete [1-2]: ");
- scanf("%d", &choice);
- return choice;
- }
- int main()
- {
- int menu_inp = menu();
- while(menu_inp != 0) {
- system("cls");
- int n;
- printf("Vuvedete kolko broq dvoiki triugulnici iskate da vuvedete: ");
- scanf("%d", &n);
- // Dynamic memory allocating for N count * triangles
- struct TrianglePair* triangles = malloc(sizeof(struct TrianglePair) * n);
- if(triangles == NULL) {
- printf("Greshka!");
- return -1;
- }
- for(int i = 0; i < n; i++) {
- printf("Dvoika triugulnici nomer %d, Triugulnik 1 \n", i + 1);
- printf("Vuvedete koordinati za tochka A\n");
- printf("A.x = ");
- scanf("%f", &triangles[i].triangleA.a.x);
- printf("A.y = ");
- scanf("%f", &triangles[i].triangleA.a.y);
- printf("Vuvedete koordinati za tochka B\n");
- printf("B.x = ");
- scanf("%f", &triangles[i].triangleA.b.x);
- printf("B.y = ");
- scanf("%f", &triangles[i].triangleA.b.y);
- printf("Vuvedete koordinati za tochka C\n");
- printf("C.x = ");
- scanf("%f", &triangles[i].triangleA.c.x);
- printf("C.y = ");
- scanf("%f", &triangles[i].triangleA.c.y);
- printf("\n\n");
- printf("Dvoika triugulnici nomer %d, Triugulnik 2 \n", i + 1);
- printf("Vuvedete koordinati za tochka A\n");
- printf("A.x = ");
- scanf("%f", &triangles[i].triangleB.a.x);
- printf("A.y = ");
- scanf("%f", &triangles[i].triangleB.a.y);
- printf("Vuvedete koordinati za tochka B\n");
- printf("B.x = ");
- scanf("%f", &triangles[i].triangleB.b.x);
- printf("B.y = ");
- scanf("%f", &triangles[i].triangleB.b.y);
- printf("Vuvedete koordinati za tochka C\n");
- printf("C.x = ");
- scanf("%f", &triangles[i].triangleB.c.x);
- printf("C.y = ");
- scanf("%f", &triangles[i].triangleB.c.y);
- }
- if(menu_inp == 1) {
- findThePairsWithEqualTriangles(triangles, n);
- }
- else if(menu_inp == 2) {
- findThePairsWithEqualSidedTriangles(triangles, n);
- }
- menu_inp = menu();
- }
- system("Pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement