2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Помогите разобраться с ошибкой!!!
Сообщение13.10.2009, 23:48 
Выбиват ошибку здесь :
Код:
k=(mass[i+1]-mass[j+1])/(mass[i]-mass[j]);
b=(mass[i+1]*mass[j]-mass[j+1]*mass[i])/(mass[i]-mass[j]);

ругается вроде что деление на ноль , почему не знаю . Помомогите кто может , в чем ошибка и как поправить ?
код: [ скачать ] [ спрятать ]
Используется синтаксис C
#include <stdio.h>
#include <conio.h>


float mass[100];
float i=0.0,j=0.0,f=0.0,q=0.0,m=0.0,t=0.0;
float k=0.0,b=0.0,y=0.0;

void main()
{
//clrscr();
printf("vvedite koordinati (x;y) \n");
   mass[0]=10;
   while(i != 2*mass[0]+1)
   {
   scanf("%f", &mass[i]);
   i++;
   }
   i=0;
    /*  while(i!=2*mass[0])
      {
      i++;
      printf("%f\n",mass[i]);
      } */

i=-1;
while(i!=2*mass[0]-3)
   {
   i=i+2;
   j=i;
   while(j!=2*mass[0]-1)
      {
      j=j+2;
      k=(mass[i+1]-mass[j+1])/(mass[i]-mass[j]);
      b=(mass[i+1]*mass[j]-mass[j+1]*mass[i])/(mass[i]-mass[j]);
         m=m+2;
         for(t=1;t<mass[0];t++)
         {
         m=m+2;
            if(m!=i && m!=j)
            {
            y=k*mass[m]+b;
               if(y<mass[m+1])
               f++;
               else
               q++;

            }
         }
      printf("(%f;",mass[i]);
       printf("%f) and",mass[i+1]);
      printf("(%f;",mass[j]);
       printf("%f)\n",mass[j+1]);

      }
   }


getch();
}

 
 
 
 Re: Помогите разобраться с ошибкой!!!
Сообщение14.10.2009, 01:37 
Ners в сообщении #251490 писал(а):
Выбиват ошибку здесь :
Вы хоть напишите, что Ваша программа делать-то должна.
И отформатируйте, пожалуйста, исходный текст с правильными отступами. А то структура кода как-то ускользает.

 
 
 
 Re: Помогите разобраться с ошибкой!!!
Сообщение14.10.2009, 05:02 
Извращение какое-то.
Вы бы ещё и остальные переменные (i,j и т.д.) в массив mass положили.

 
 
 
 Re: Помогите разобраться с ошибкой!!!
Сообщение14.10.2009, 09:03 
1. Плохое форматирование.
2. Логика программа ужасна.
3. Переменная типа float не может использоваться как индекс массива (см. переменные i, j, m). Если у Вас этот код компилируется, выкиньте Ваш компилятор, он не соответствует стандарту.
4. По вашей ошибке - возможные варианты:
- выражение mass[i]-mass[j] действительно равно нулю. Это возможно когда mass[i] действительно равно mass[j], i не равно j. Частный случай - mass[i] = mass[j] = 0, вероятен при вводе ерунды вместо осмысленной информации при чтении с помощью scanf.
- i равно j
- Выход за пределы массива/выход за пределы тех элементов массива, которые заполнены с помощью scanf (оставшиеся элементы вплоть до 99-го заполнены нулями, т.к. массив объявлен как глобальный).
5. Для помощи Вам, помимо текста программы и строки возникновения ошибки, необходим также набор вводимых данных, приводящий к ошибке. У меня, например, вариант 2, 1, 2, 3, 4 ошибки не дает.
6. Нет никакой проверки на осмысленность вводимых данных, нет подсказки, что первое число - фактически определяет кол-во наборов координат x, y (что бы они ни значили).

-- Ср окт 14, 2009 10:26:56 --

Вашу программу проще переписать, с нормальной логикой, чем править эту - поверьте, никакого толка от нее, даже исправленной, не будет - она противоречит здравому смыслу написания программ, и я это говорю вовсе не для того, чтобы Вас обидеть.

 
 
 
 Re: Помогите разобраться с ошибкой!!!
Сообщение17.10.2009, 00:27 
Код:
k=(mass[i+1]-mass[j+1])/(mass[i]-mass[j]);
b=(mass[i+1]*mass[j]-mass[j+1]*mass[i])/(mass[i]-mass[j]);

Прокрутите циклы вручную для малого количества элементов. Скорее всего на каком-то прохождении обоих циклов находятся такие i и j, для которых элементы массива равны.

P.S. со всеми вышеописанными замечаниями согласен. Текст ужасно написан...

 
 
 [ Сообщений: 5 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group