Другие языки программирования и технологии

Задача на Си с функциями

Нужно вычислить координаты центра трех материальных точек тяжести, используя функции для вычисления X и Y (ИМЕННО функции) . Вот, написал программу, но она не работает. В строках int calc_x и int calc_y точки с запятой нужны или нет? Если убрать, то появляется ошибка, что не хватает точек с запятой, а если поставить, то при выполнении программы появляется ошибка #3, что переменные x0 и y0 не инициализированы. может нужно поместить прототип функции или что то еще?

#include <stdio.h>

int main()
{
int m1, m2, m3, M, x1, x2, x3, x0, y1, y2, y3, y0;
printf ("Vvedite massy tochek m1, m2, m3 i koordinaty tochek x1, x2, x3, y1, y2, y3\n");
scanf("%d %d %d %d %d %d %d %d %d", &m1, &m2, &m3, &x1, &x2, &x3, &y1, &y2, &y3);
M = m1+m2+m3;
int calc_x (int x1, int x2, int x3, int x0);
{
x0 = (m1*x1+m2*x2+m3*x3)/M;
return x0;
}
int calc_y (int y1, int y2, int y3, int y0);
{
y0 = (m1*y1+m2*y2+m3*y3)/M;
return y0;
}
printf ("Koordinaty centra tjajesti=%d, %d\n",x0, y0);
return 0;
}
Это не программа на Си, а случай тяжелой наркомании.
Даже если предположить, что у тебя компилятор поддерживает стандарт С99 или С11, в которых можно определять локальные функции, то где эти функции вызываются?

#include <stdio.h>

struct point {
    double x;
    double y;
    double m;
};

// определили функцию
void calc_mass_center(double *x0, double *y0, struct point p[], int n) {
    int c;
    double m = 0;
    *x0 = 0; *y0 = 0;
    for (c = 0; c < n; ++c) {
        m += p[c].m;
        *x0 += p[c].x * p[c].m;
        *y0 += p[c].y * p[c].m;
    }
    *x0 /= m; *y0 /= m;
}

#define N 3

int main() {
    double x0, y0;
    struct point p[N];
    int c;
    for (c = 0; c < N; ++c) {
        printf("Введите координаты и массу точки %d: ", c);
        scanf("%lf%lf%lf", &p[c].x, &p[c].y, &p[c].m);
    }
    // вызываем ранее определенную функцию
    calc_mass_center(&x0, &y0, p, N);
    printf("Координаты центра тяжести: %f, %f\n", x0, y0);
    return 0;
}

> =Serge=
> В С/С++ не допускается вложенность функций.
Ну насчет Си ты не прав, последние стандарты допускают:

Pavel Shleev
Pavel Shleev
79 550
Лучший ответ
В С/С++ не допускается вложенность функций. А у вас в main {} содержится черте что. Нужно их выделить:

#include <stdio.h>

int main()
{
int m1, m2, m3, M, x1, x2, x3, x0, y1, y2, y3, y0;
printf ("Vvedite massy tochek m1, m2, m3 i koordinaty tochek x1, x2, x3, y1, y2, y3\n");
scanf("%d %d %d %d %d %d %d %d %d", &m1, &m2, &m3, &x1, &x2, &x3, &y1, &y2, &y3);
M = m1+m2+m3;

printf ("Koordinaty centra tjajesti=%d, %d\n",x0, y0);
return 0;
}
int calc_x (int x1, int x2, int x3, int x0)
{
x0 = (m1*x1+m2*x2+m3*x3)/M;
return x0;
}
int calc_y (int y1, int y2, int y3, int y0)
{
y0 = (m1*y1+m2*y2+m3*y3)/M;
return y0;
}
А в начале программы поместить прототипы этих функций.
В общем учись с азов:

Ну возможно в С11 что то новое появилось, но Керниган и Ритчи никто не отменял.
Сергей Бокслер
Сергей Бокслер
35 996
Конечно не нужны точки с запятыми после функций, да и x0 и y0 должны быть double