1 error C2143: синтаксическая ошибка: отсутствие “;”

167
19 декабря 2016, 19:50

Написала код программы для этой задачи,а она выдает ошибку,подскажите что не так.И не прописала два последних условия- E-сбит ровно один истребитель,F-сбит ровно один самолет

Происходит воздушный бой между бомбардировщиком и двумя атакающими его истребителями. Стрельбу начинает бомбардировщик: он дает по каждому истребителю один выстрел и сбивает его с вероятностью р1. Если данный истребитель не сбит, то он независимо от судьбы другого стреляет по бомбардировщику и сбивает его с вероятностью р2. Определить вероятности следующих исходов боя: А- сбит бомбардировщик В- сбиты оба истребителя С -сбит хотя бы один истребитель D-сбит хотя бы один самолет E-сбит ровно один истребитель F-сбит ровно один самолет

#include <iostream>
#include <math.h>
using namespace std;
void main()
{
    float r1,r2,r3, r4, r5, r6, r7, r8, r9;
    int ma=0, mb=0, mc=0, md=0, me=0, mf=0;
    double P1=0.2;
    double P2=0.3;
    int n=1000;
    //cout<<(double)(rand() % 100) / 100;
    for(int i = 0; i < n; i++)
    {   
        r1 = (float)(rand() % 100) / 100;
        r2 = (float)(rand() % 100) / 100;
        //сбит бомбардировщик
        if(r1 < P1)
        {   
            r3 = (float)(rand() % 100) / 100;
            if(r3 < (1 - P1))
            {
                r5 = (float)(rand() % 100) / 100;
                if (r5 < P2) 
                    ma ++;
                else break;
            }
            else break;
        }
        else (r2 < P1)
        {
            r4 = (float)(rand() % 100) / 100;
              if(r4 < (1 - P1))
              {
                  r6 = (float)(rand() % 100) / 100;
                  if (r6 < P2) 
                      ma++;
                  else break;
              }
        }
        //сбиты оба истребителя
        if (r3 < (1 - P1) && r4 < (1 - P1))
        {
            r7 = (float)(rand() % 100) / 100;
            if( r7 < P1)
                mb++;
        }
        //сбит хотя бы один истребитель
        else if (r3 < (1 - P1) || r4 < (1 - P1))
        {
            r8 = (float)(rand() % 100) / 100;
            if( r8 < P1)
                mc++;
        }
        //сбит хотя бы один самолет
        else if (r5 < P1 || r6 < P1 || r3 < (1 - P1) || r4 < (1 - P1) )
        {
            r9 = (float)(rand() % 100) / 100;
            if( r9 < P1 || r9 < P2)
                md = ma + mc;
        }
        //сбит ровно один истребитель
        //сбит ровно один самолет
    }
    cout<<endl;
    cout<<ma / n;
    cout<<endl;
    cout<<mb / n;
    cout<<endl;
    cout<<mc / n;
    cout<<endl;
cout<<md / n;
cout<<endl;
system("pause");

Добавлено:

Ошибка 1 error C2143: синтаксическая ошибка: отсутствие ";" 2 IntelliSense: требуется точка с запятой ";"

Где эта скобка открывается показывает ошибку { r4 = (float)(rand() % 100) / 100; if(r4 < (1 - P1)) а где что нужно добавить, понять не могу

в 33 строчке ошибку показывает

Answer 1

Правильно пишет, тк r3 инициализируется только в одной ветке. Если из предложения else (r2 < P1) уберете выражение в скобках - оставите только else, то будет выдаваться та же ошибка - неинициализированная переменная r3. Разберитесь, что вы написали и что это за переменные. Не вдаваясь в замысел, мне видится так. Но правильно или нет, судить тольков вам.

for(int i = 0; i < n; i++)
{
r1 = (float)(rand() % 100) / 100;
r2 = (float)(rand() % 100) / 100;
r3 = (float)(rand() % 100) / 100;
r4 = (float)(rand() % 100) / 100;
}

и тд

READ ALSO
Crypto API: Подписать данные сертификатом

Crypto API: Подписать данные сертификатом

Есть Crypto API, есть сертификат, есть данныеНеобходимо получить подпись

221
Выделение памяти с помощью операции new

Выделение памяти с помощью операции new

Немогу понять в чем разница между следующими двумя операторами

233
Оператор преобразования типа

Оператор преобразования типа

Какие аргументы и код возврата имеет оператор преобразования типа? В каких случаях неизбежно его использование?

303