Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/2: Рейтинг темы: голосов - 2, средняя оценка - 4.50
Острослав
0 / 0 / 0
Регистрация: 17.03.2013
Сообщений: 37
1

Создать массив n на n-1, в котором будут записаны расстояния от одной точки до других

13.11.2013, 21:25. Просмотров 439. Ответов 1
Метки нет (Все метки)

Здравствуйте.
Помогите найти ошибку в коде.
Мне на вход подается число n - число точек. Надо создать массив n на n-1, в котором будут записаны расстояния от одной точки до других. К примеру, в первой строке массива будет расстояние от первой точки до второй, от первой точки до третьей, во второй строке массива будет расстояние от второй точки до первой, от второй точки до третьей и т.д.
Вообщем-то проблема в том, что динамический массив, будь то координат точек, будь то уже посчитанных расстояний, выводится как-то криво (огромные числа). Как я понимаю ошибка в выводе, но, возможно, ошибка при создании массивов, но это маловероятно.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
double**  maswrt ( double **mas, double **coor, int n ) //расчет расстояний между точками
{
    for ( int i = 0; i < n; i++ )
        for ( int j = 0; j < (n - 1); j++)
            if (i != j)
                mas[i][j] = sqrt ( pow ( (coor[i][0] + coor[j][0]), 2 )  + pow ( (coor[i][1] + coor[j][1]) , 2 ) );
    return mas;
}
 
void masprt ( double ** mas, int n ) //печатание массива
{
    for ( int i = 0; i < n; i ++ )
    {
        for ( int j = 0; j < n-1; j ++ )
            printf ( "%2.2f  ", mas[i][j]);
            printf("\n");
    }
}
 
void masdel ( double** mas, int n ) //удаление указателей на элементы строк массива
{
    for ( int i = 0; i < n; i++ )
        free ( mas [ i ] );
}
 
void mascrt (double ** coor, int n ) /*создание массива для расстояний и 
вызов выше описанных функций*/
{
    double **mas = (double**) malloc ( n * sizeof(double*));
    for ( int i = 0; i < n; i++ )
        mas[i] = (double*) malloc ( (n - 1) * sizeof(double));
    mas = maswrt (mas, coor, n);
    masprt (mas, n);
    masdel (mas, n);
    free (mas);
}
int main () /*основная функция, в которой читается кол-во точек, создается динамический 
массив координат, выводится массив координат, вызывается функция для создания и 
последующей работы с массивом расстояний, удаляются указатели на элементы строк 
массива координат и удаляется указатель на сам массив*/
{
    int n;
    scanf ( "%d", &n );
 
    double **coor = (double**) malloc (n * sizeof(double*));;
    for ( int i = 0; i < n; i++ )
    {
        coor[i] = (double*) malloc (2 * sizeof(double));
        scanf ( "%f %f ", &coor[i][0], &coor[i][1] );
    }
    masprt (coor, n);
    mascrt (coor, n);
    masdel (coor, n);
    free ( coor);
    return 0;
}
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2013, 21:25
Ответы с готовыми решениями:

Задан вещественный массив размера N. Создать целочисленный массив такого же размера, в котором будут записаны индексы исходного массива в порядке во
Помогите с задачей: Задан вещественный массив размера N. Создать целочисленный массив такого же...

Создать файл, в котором фамилии будут записаны в одну строку и разделены запятыми
Текстовый файл содержит несколько строк с фамилиями. Создать файл, в котором эти фамилии будут...

Создать новый файл, в котором строки исходного будут записаны в обратном порядке
спасайте! Текстовый файл содержит три строки символов. Создать новый файл, в котором эти строки...

Используя стек, создать другой текстовый файл, в котором числа будут записаны в обратном порядке - Free Pascal
Создать текстовый файл, содержащий текстовую и числовую информацию. Используя стек, создать другой...

Создать массив размером n(n-1), элементами которого являются расстояния от каждой из точек до n-1 других
На плоскости заданы своими координатами n точек. Создать массив размером n(n-1), элементами...

1
IrineK
Заблокирован
14.11.2013, 08:36 2
строка 15:
C
1
printf ( "%2.2lf  ", mas[i][j]);
строка 49:
C
1
scanf ( "%lf %lf ", &coor[i][0], &coor[i][1] );
0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.11.2013, 08:36

Создать массив 5 на 5 в котором числа будут от 1 до 12 и повторятся по 2 раза
Помогите создать массив 5 на 5 в котором числа будут от 1 до 12 и повторятся по 2 раза помогите...

Создать массив, в котором будут хранится названия / типы классов
Собственно, вот в чем задача, есть некоторые классы реализовывающие интерфейс IPacket. Нужно...

Разработать консольный проект, в котором будут выполнены вычисления: скорости, расстояния, времемни
Разработать консольный проект, в котором будут выполнены вычисления: скорости, расстояния,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.