Добрый вечер. Помогите разобраться с ошибками, накосячил походу с указателями.
Код:
# include "stdafx.h"
# include <stdio.h>
# include <Windows.h>
# include <math.h>
# include <stdlib.h>
const int nmax = 50;
struct perem
{
int a, b, c;
float r;
}mas [nmax];
float Rasstoyanie(int x0, int y0, perem *p)
{
return abs(p->a * x0 + p->b * y0 + p->c)/sqrt(pow((float)p->a, 2) + pow((float)p->b, 2));
}
void Print(perem *m [], short n)
{
short i;
printf("Коэффициенты прямых:\nA: ");
for(i = 0;i < n;i++)
printf("%5d", m [i]->a);
printf("\nB: ");
for(i = 0;i < n;i++)
printf("%5d", m [i]->b);
printf("\nC: ");
for(i = 0;i < n;i++)
printf("%5d", m [i]->c);
printf("\nРасстояния до точки А:\n ");
for(i = 0;i < n;i++)
printf("%5.1f", m [i]->r);
printf("\n\n");
}
void main ()
{
SetConsoleOutputCP(1251);
perem m [nmax], p [nmax];
short n, k, i, j;
int ax, ay;
perem x;
float i1, i2;
float proverka;
system("cls");
do
{
printf("Введите кол-во прямых. n=");
scanf("%d", &n);
}
while ((n < 0) || (n > nmax));
printf("\nВведите коэффициенты прямых:\n");
for(i = 0;i < n;i++)
{
printf("Прямая %d", i);
do
{
proverka = 0;
printf("\nA=");
scanf("%d", &m [i].a);
printf("B=");
scanf("%d", &m [i].b);
printf("C=");
scanf("%d", &m [i].c);
proverka = sqrt(pow((double)m [i].a, 2) + pow((double)m [i].b, 2) + pow((double)m [i].c, 2));
if (proverka == 0)
printf("\nВсе коэффициенты не могут быть равны 0\n");
}
while (proverka == 0);
}
printf("\nВведите абциссу точки А (х):\n");
scanf("%d", &ax);
printf("\nВведите ординату точки А (у):\n");
scanf("%d", &ax);
printf("\nПункт А\n");
for(i = 0;i < n;i++)
m[i].r = Rasstoyanie(ax, ay, m);
printf("Исходное множество:\n");
Print(*m, n);
printf("\n");
system("pause");
printf("Пункт Б\n");
do
{
printf("Введите интервал i1<i2:\n");
scanf("%f %f", &i1, &i2);
}
while (i1 > i2);
k = 0;
for(i = 0;i < n;i++)
if ((m[i].r >= i1) && (m[i].r <= i2))
{
k++;
p [k] = m [i];
}
if (k = 0)
printf("Прямых с расстоянием до точки А от %0.1f", i1, " до %0.1f", i2, "нет");
else
{
printf("Прямые с расстоянием до точки А от %0.1f", i1, " до %0.1f", i2);
Print(p, k);
printf("\n");
system("pause");
printf("Пункт В\n");
for(i = 0; i < (k-1);i++)
for(j = (i + 1);j < k;j++)
if (p [i].r > p [j].r)
{
x = p [i];
p [i] = p [j];
p [j] = x;
}
printf("В порядке возрастания расстояний:\n");
Print(p, k);
}
}
Нам больше не нужно смотреть на мир сквозь замочную скважину 64Кб сегмента (с) ВалИк