До передачи элементы структуры отображаются правильно, а после - нет - 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);
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.727 из 5
Похожие ответы