#include <iostream>
#include <stdlib.h>
using namespace std;
void rez(int S1, int n, int m, int* V, int t[])
{
int S = S1 * n;
*V = 0;
for (int i = 0; i < m; i++)
{
if ((S / t[i]) > *V)
*V = S / t[i];
}
cout << V;
}
int main()
{
setlocale(LC_ALL, "Russian");
cout << " Программа " << endl << " Велогонщик " << endl << " Cовместная разработка " << endl;
int S1, m, n, t[8];
int *V;
cout << "Введите длину 1 круга (150 - 1500 метров): " << endl;
cin >> S1;
if ((S1 >= 150) and (S1 <= 1500));
else
{
cout << "Ошибка введенное значение невозможно ";
main();
}
cout << "Введите кол-во кругов(3-10): " << endl;
cin >> n;
if (n >= 3 and n <= 10);
else
{
cout << "Ошибка введенное значение невозможно ";
main();
}
cout << "Введите кол-во гонщиков(5-20): " << endl;
cin >> m;
if ((m >= 5) and (m <= 20));
else
{
cout << "Ошибка введенное значение невозможно ";
main();
}
cout << "Введите время каждого гонщика(в секундах): " << endl;
for (int i = 0; i < m; i++)
{
cout << "Время [" << i + 1 << "] гонщика " << ": ";
cin >> t[i];
if (t[i] >= 60 and t[i] <= 960);
else
{
cout << "Ошибка введенное значение невозможно ";
main();
}
}
rez(S1, n, m, V, t);
cout << "Длина круга - " << S1 << " метров " << endl << "Кол-во кругов - " << n << endl << "Кол-во гонщиков: " << m << endl << "Скорость победителя: " << *V << " метров в секунду " << endl;
}
C/C++
Помогите найти ошибки в коде на C++, не выводится последняя строчка
В коде C++ есть несколько ошибок:
Переменная V объявлена как указатель, но она ни на что не указывает. Он должен быть инициализирован и выделена память, прежде чем его можно будет использовать. Один из способов исправить это - изменить объявление V на целое число и передать его адрес функции rez следующим образом: int V; rez(S1, n, m, &V, t);
Функция rez ничего не возвращает. Он должен возвращать значение V в конце функции. Добавьте return *V; в конце функции rez.
В инструкции cout в функции rez вам нужно вывести значение *V, обратите внимание на адрес V. Измените инструкцию cout на cout << *V;
В функции main вы вызываете main() рекурсивно, когда пользователь вводит недопустимое значение. Это не очень хорошая практика и может привести к переполнению стека. Вместо этого вы можете использовать цикл, чтобы запросить у пользователя допустимый ввод.
Вот исправленный код:
#include <iostream>
#include <stdlib.h>
using namespace std;
int rez(int S1, int n, int m, int* V, int t[])
{
int S = S1 * n;
*V = 0;
for (int i = 0; i < m; i++)
{
if ((S / t[i]) > *V)
*V = S / t[i];
}
return *V;
}
int main()
{
setlocale(LC_ALL, "Russian");
cout << " Программа " << endl << " Велогонщик " << endl << " Cовместная разработка " << endl;
int S1, m, n, t[8], V;
cout << "Введите длину 1 круга (150 - 1500 метров): " << endl;
cin >> S1;
if ((S1 < 150) or (S1 > 1500))
{
cout << "Ошибка введенное значение невозможно ";
return 1;
}
cout << "Введите кол-во кругов(3-10): " << endl;
cin >> n;
if (n < 3 or n > 10)
{
cout << "Ошибка введенное значение невозможно ";
return 1;
}
cout << "Введите кол-во гонщиков(5-20): " << endl;
cin >> m;
if (m < 5 or m > 20)
{
cout << "Ошибка введенное значение невозможно ";
return 1;
}
cout << "Введите время каждого гонщика(в секундах): " << endl;
for (int i = 0; i < m; i++)
{
cout << "Время [" << i + 1 << "] гонщика " << ": ";
cin >> t[i];
if (t[i] < 60 or t[i] > 960)
{
cout << "Ошибка введенное значение невозможно ";
return 1;
}
}
rez(S1, n, m, &V, t);
cout << "Длина круга - " << S1 << " метров " << endl << "К
Переменная V объявлена как указатель, но она ни на что не указывает. Он должен быть инициализирован и выделена память, прежде чем его можно будет использовать. Один из способов исправить это - изменить объявление V на целое число и передать его адрес функции rez следующим образом: int V; rez(S1, n, m, &V, t);
Функция rez ничего не возвращает. Он должен возвращать значение V в конце функции. Добавьте return *V; в конце функции rez.
В инструкции cout в функции rez вам нужно вывести значение *V, обратите внимание на адрес V. Измените инструкцию cout на cout << *V;
В функции main вы вызываете main() рекурсивно, когда пользователь вводит недопустимое значение. Это не очень хорошая практика и может привести к переполнению стека. Вместо этого вы можете использовать цикл, чтобы запросить у пользователя допустимый ввод.
Вот исправленный код:
#include <iostream>
#include <stdlib.h>
using namespace std;
int rez(int S1, int n, int m, int* V, int t[])
{
int S = S1 * n;
*V = 0;
for (int i = 0; i < m; i++)
{
if ((S / t[i]) > *V)
*V = S / t[i];
}
return *V;
}
int main()
{
setlocale(LC_ALL, "Russian");
cout << " Программа " << endl << " Велогонщик " << endl << " Cовместная разработка " << endl;
int S1, m, n, t[8], V;
cout << "Введите длину 1 круга (150 - 1500 метров): " << endl;
cin >> S1;
if ((S1 < 150) or (S1 > 1500))
{
cout << "Ошибка введенное значение невозможно ";
return 1;
}
cout << "Введите кол-во кругов(3-10): " << endl;
cin >> n;
if (n < 3 or n > 10)
{
cout << "Ошибка введенное значение невозможно ";
return 1;
}
cout << "Введите кол-во гонщиков(5-20): " << endl;
cin >> m;
if (m < 5 or m > 20)
{
cout << "Ошибка введенное значение невозможно ";
return 1;
}
cout << "Введите время каждого гонщика(в секундах): " << endl;
for (int i = 0; i < m; i++)
{
cout << "Время [" << i + 1 << "] гонщика " << ": ";
cin >> t[i];
if (t[i] < 60 or t[i] > 960)
{
cout << "Ошибка введенное значение невозможно ";
return 1;
}
}
rez(S1, n, m, &V, t);
cout << "Длина круга - " << S1 << " метров " << endl << "К
В коде несколько ошибок:
В функции rez параметр V должен быть указателем на int, а не самим int, так как нужно изменить значение переменной, на которую он указывает. Нужно добавить оператор взятия адреса & при передаче параметра в функцию, и в самой функции нужно разыменовать указатель при обращении к переменной.
Последняя строка в функции rez должна выводить значение переменной *V, а не указателя V.
В блоках else, где происходит вывод сообщения об ошибке, вызывается функция main(). Это неправильно, потому что main() не должна вызывать сама себя. Вместо этого нужно добавить оператор return 0;, чтобы завершить программу.
В функции rez параметр V должен быть указателем на int, а не самим int, так как нужно изменить значение переменной, на которую он указывает. Нужно добавить оператор взятия адреса & при передаче параметра в функцию, и в самой функции нужно разыменовать указатель при обращении к переменной.
Последняя строка в функции rez должна выводить значение переменной *V, а не указателя V.
В блоках else, где происходит вывод сообщения об ошибке, вызывается функция main(). Это неправильно, потому что main() не должна вызывать сама себя. Вместо этого нужно добавить оператор return 0;, чтобы завершить программу.
Похожие вопросы
- Помогите найти ошибку в коде
- Помогите найти ошибки в коде c++
- Помогите найти ошибку в коде
- С++. Помогите найти ошибку в коде.
- Помогите найти ошибку в коде!!!
- Помогите найти ошибку в коде
- Помогите найти ошибку.Где ошибка в коде не могу найти язык СИ
- Помогите найти ошибку в тесте на последовательности бит C++
- Помогите с информатикой. не могу найти ошибку в коде
- Помогите исправить ошибку в коде, смотри внутри.