До передачи элементы структуры отображаются правильно, а после - нет - C (СИ)
Формулировка задачи:
Вот получился такой код. Выводов напихано, чтобы найти ошибку.
Вот что выводит:
То есть до передачи элементы структуры отображаются правильно, а внутри функции уже какой-то бред.
#include <stdio.h> #include <stdlib.h> struct point { float x; float y; float z; } set[10]; int main() { int first_point (int *k, struct point *set, int M); int L; struct point set[30]; printf("Enter L: "); scanf("%d", &L); int i; int* c; int k[L]; float s; // Ввод данных for (i=0;i<L;i++) {printf("Enter x: "); scanf("%f", &set[i].x); printf("Enter y: "); scanf("%f", &set[i].y); printf("Enter z: "); scanf("%f", &set[i].z);} printf("%f\n", set[1].x ); for (i=0;i<3;i++) { k[i]=-1; printf("%i\n", k[i]); } i=first_point(&set, &k, L); printf("%i\n", i ); return 0; getchar(); } int first_point (int *k, struct point *set, int M) { int l,i; float ax,ay; printf("%f\n", set[1].x ); l=0; while(k[l]!=-1) l++; printf("%i\n", l ); ax=set[l].x; ay=set[l].y; printf("%i\n", ax ); for(i=l++;i<M;i++) if(k[l]=-1) if (ax<set[i].x) { ax=set[i].x; ay=set[i].y; l=i; printf("%i\n", ax ); } else if (ay<set[i].y) { ax=set[i].x; ay=set[i].y; l=i; } printf("%i\n", ax ); return l; }
Вот немного переделала ввод-вывод, но функция все равно выводит бред:
#include <stdio.h> #include <stdlib.h> struct point { double x; double y; double z; } set[10]; int main() { int first_point (int *k, struct point *set, int M); int L; struct point set[30]; printf("Enter L: "); scanf("%i", &L); int i; int* c; int k[L]; double s; // Ввод данных for (i=0;i<L;i++) {printf("Enter x: "); scanf("%lf", &set[i].x); printf("%lf\n", set[i].x ); printf("Enter y: "); scanf("%lf", &set[i].y); printf("Enter z: "); scanf("%lf", &set[i].z);} printf("%lf\n", set[1].x ); for (i=0;i<3;i++) { k[i]=-1; printf("%i\n", k[i]); } i=first_point(&set, &k, L); printf("%lf\n", i ); return 0; getchar(); } int first_point (int *k, struct point *set, int M) { int l,i; double ax,ay; printf("%lf\n", set[1].x ); l=0; while(k[l]!=-1) l++; printf("%i\n", l ); ax=set[l].x; ay=set[l].y; printf("%lf\n", ax ); for(i=l++;i<M;i++) if(k[l]=-1) if (ax<set[i].x) { ax=set[i].x; ay=set[i].y; l=i; printf("%lf\n", ax ); printf("%\n\n"); printf("%lf\n", ax ); printf("%\n\n"); } else if (ay<set[i].y) { ax=set[i].x; ay=set[i].y; l=i; } printf("%lf\n", ax ); return l; }
Решение задачи: «До передачи элементы структуры отображаются правильно, а после - нет»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> struct point { double x; double y; double z; } set[10]; int first_point ( struct point* ptr, int *k, int M, int l) { int i; double ax,ay; while(k[l]!=-1) l++; ax=ptr[l].x; ay=ptr[l].y; for(i=l++;i<M;i++) if(k[l]=-1) if (ax<ptr[i].x) { ax=ptr[i].x; ay=ptr[i].y; l=i; } else if (ax==ptr[i].x) if(ay<ptr[i].y) { ax=ptr[i].x; ay=ptr[i].y; l=i; }; return l; } int Left(struct point* ptr, int i, int j, int k) //ОТЛАДИТЬ!!!!!! { int f; f=((set[j].x-set[i].x)*(set[k].y-set[i].y)-(set[j].y-set[i].y)*(set[k].x-set[i].x)<0); return f; } int* convex_hull(struct point* ptr, int* k, int N) { int i, t, newt, f, first, m; f=0; while(t!=N) first=first_point(ptr, k, N, t); //нашли первую точку текущего контура printf("%lf\n", ptr[first].x ); k[f]=first; //заполнили в маске номер точки t=f; m=0; do {m=m+1; newt=0; for(i=0;i<N;i++) if(i!=t) if((newt=0)||Left(ptr,t,i,newt)) {newt=i; f++;} t=newt; k[f]=t;} while(t==first); for(i=0;i<N;i++) printf("%i\n", k[i]); return k; } int main() { int L; printf("Enter L: "); scanf("%i", &L); int i; int k[L];// Ввод данных for (i=0;i<L;i++) { printf("Enter x: "); scanf("%lf", &set[i].x); printf("Enter y: "); scanf("%lf", &set[i].y); printf("Enter z: "); scanf("%lf", &set[i].z); } for (i=0;i<3;i++) { k[i]=-1; } convex_hull(set, k, L); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д