Загрузка...

Прога встает после ввода с консоли

Тема в разделе C/C++ создана пользователем mondaylevi 22 дек 2023. 92 просмотра

Загрузка...
  1. mondaylevi
    mondaylevi Автор темы 22 дек 2023 https://zelenka.guru/threads/5062611/ - работаем 47 22 ноя 2022
    После 23 строки ( cin >> h) прога встает и ничего не происходит. Код ниже



    C
    #include <iostream>
    #include <cmath>
    using namespace std;

    double F(double a, double x){
    double ret;
    if(a<0)return sin(a+x)*sin(a+x);
    return sin(1+a*x-x*x);
    }

    int main(){
    int n, m;
    double z0,z1,h;
    cout << "Enter z0:" << endl;
    cin >> z0;
    cout << "Enter z1:" << endl;
    cin >> z1;
    cout << "Enter n:" << endl;
    cin >> n;
    cout << "Enter m:" << endl;
    cin >> m;
    cout << "Enter h:" << endl;
    cin >> h;

    int* arrfi = new int[m];
    for(int i = 0; i < m; i++) {
    arrfi[i] = 0;
    }

    for(int i = 2; i < n; i++){
    double zi = F(z0,z1);
    zi = (zi+1.5)*(zi+1.5);
    z0 = z1;
    z1 = zi;
    for(int j = 1; j < m; i++){
    int temp1 = (j-1)*h;
    int temp2 = j*h;

    if( (temp1 <= zi) && (temp2 > zi) ){
    arrfi[j-1]+=1;
    }
    }
    }
    for(int i = 0; i < m; i++){
    cout << arrfi[i] << " ";
    }
    }
     
  2. ChatGPT
    ChatGPT 22 дек 2023 2254 14 мар 2023
    mondaylevi, проблема в вашем коде находится внутри второго цикла `for(int j = 1; j < m; i++)`. Вместо инкремента переменной `j`, вы инкрементируете переменную `i`, что приводит к бесконечному циклу и зависанию программы.

    Вам нужно заменить `i++` на `j++` во втором цикле, чтобы исправить эту ошибку. Вот исправленный код:

    C

    #include <iostream>
    #include <cmath>
    using namespace std;

    double F(double a, double x){
    double ret;
    if(a<0)return sin(a+x)*sin(a+x);
    return sin(1+a*x-x*x);
    }

    int main(){
    int n, m;
    double z0,z1,h;
    cout << "Enter z0:" << endl;
    cin >> z0;
    cout << "Enter z1:" << endl;
    cin >> z1;
    cout << "Enter n:" << endl;
    cin >> n;
    cout << "Enter m:" << endl;
    cin >> m;
    cout << "Enter h:" << endl;
    cin >> h;

    int* arrfi = new int[m];
    for(int i = 0; i < m; i++) {
    arrfi[i] = 0;
    }

    for(int i = 2; i < n; i++){
    double zi = F(z0,z1);
    zi = (zi+1.5)*(zi+1.5);
    z0 = z1;
    z1 = zi;
    for(int j = 1; j < m; j++){
    int temp1 = (j-1)*h;
    int temp2 = j*h;

    if( (temp1 <= zi) && (temp2 > zi) ){
    arrfi[j-1]+=1;
    }
    }
    }
    for(int i = 0; i < m; i++){
    cout << arrfi[i] << " ";
    }
    }
    Попробуйте запустить исправленный код и проверьте, работает ли он как ожидается.
     
    1. Посмотреть предыдущие комментарии (2)
Top