Помогите переписать код с C++ на C
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int main()
{
float a;
float b;
vector<float>s;
vector<float>v;
cin >> a;
cin >> b;
for (int i = 0; i < a; ++i)
{
float d;
float e;
cin >> d;
cin >> e;
s.push_back(d);
v.push_back(e);
}
float dou = -1;
while (true)
{
float sum = 0;
for (int i = 0; i < s.size(); ++i)
{
sum += s[i] / (v[i] + dou);
}
if (sum <= b+0.01 && sum >= b-0.01)
{
cout << endl << dou << endl;
break;
}
dou += 0.01;
cout << dou << endl;
}
}
Ответы (1 шт):
Автор решения: avp
→ Ссылка
Для начала (кстати, это замечание справедливо и для С++), измените тип переменной a, которая задает размер задачи, на целый и включите необходимые заголовочные (.h) файлы. Т.е.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
...
int a;
float b;
Поскольку вы по сути вводите размеры векторов с клавиатуры, то просто перенесите их создание после ввода размера. Для ввода a и b вызывайте фунцию scanf(), которая возвращает количество успешно прочитанных переменных. Т.о. получите
if (scanf("%d %f", &a, &b) != 2) {
puts("wrong input");
exit(1);
}
float *s = malloc(a * sizeof(float));
float *v = malloc(a * sizeof(float));
if (s == 0 || v == 0) {
puts("out of memory");
exit(2);
}
Для ввода в цикле переменных d и e также используйте scanf, а введенные значения просто копируете в элементы динамических массивов s и v.
for (int i = 0; i < a; ++i)
{
float d;
float e;
if (scanf("%f %f", &d, &e) != 2) {
printf ("wrong array input at %d pair\n", i);
exit(1);
}
s[i] = d;
v[i] = e;
}
Ну, далее вместо cout вызываете printf()
printf("\n%f\n", dou);
и
printf("%f\n", dou);
Собственно, все...