Нужно вычислить координаты центра трех материальных точек тяжести, используя функции для вычисления 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=
> В С/С++ не допускается вложенность функций.
Ну насчет Си ты не прав, последние стандарты допускают:

Даже если предположить, что у тебя компилятор поддерживает стандарт С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=
> В С/С++ не допускается вложенность функций.
Ну насчет Си ты не прав, последние стандарты допускают:

В С/С++ не допускается вложенность функций. А у вас в 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 что то новое появилось, но Керниган и Ритчи никто не отменял.
#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 что то новое появилось, но Керниган и Ритчи никто не отменял.
Конечно не нужны точки с запятыми после функций, да и x0 и y0 должны быть double
Похожие вопросы
- Помогите с задаче в СИ
- Turbo Pascal. 2 задачи на процедуры и функции
- Непонятная ошибка в программе на Си (в функции malloc)
- Помогите решить задачи на Си! Пожалуйста!!!
- Подскажите пожалуйста как такую задачу на СИ решать?
- помогите решить задачу по Си
- помогите....не представляю что делать с этой задачей....язык си....
- Помогите решить задачу на си++
- ПОМОГИТЕ РЕШИТЬ задачи по Си
- помогите пожалуста решить задачу на СИ++..