Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Задача про Форт Нокс |
Автор: Мизеракль 3.11.2012, 11:55 |
Доброго времени суток. У меня возникла не большая проблема с кодом, решил посоветоваться у вас на форуме. На С++(пишу на Visual Studio 2010 Ultimate) написать программу которая моделирует загрузку инопланетного корабля золотыми слитками Форт Нокса. Суть задачи: Програма случайным образом генерирует значение для переменных: Vmax (объем трюма) и Mmax (грузоподъемность инопланетного корабля). После генерации значений программа начинает загружать трюм инопланетного корабля золотыми слитками. Она будет выполняться (загружать трюм слитками), пока выполняется условие: if ((V <Vmax) and (M <Mmax)) Если условие не выполняется, то программа завершает свое выполнение. Если условие выполняется, загружается на конвейер новый слиток. Программа генерирует случайные параметры слитка (линейные размеры и среднюю плотность: X, Y, Z, ρ). Если слиток не может поместиться в трюме, т.е. условие if ((V + x * y * z <= Vmax) and (M + ρ * x * y * z <= Mmax)) не выполняется, то мы его выбрасываем (drop) и загружаем новый слиток. Если слиток помещается в трюме, то мы должны проверить условие прохождения слитка через окошко в трюм: if(((a>=x)and(b>=y))or((a>=y)and(b>=x))or((a>=x)and(b>=z))or((a>=z)and(b>=x))or((a>=z)and(b>=y))or((a>=y)and(b>=z))or((a>=y)and(b>=z))) a и b - размеры окошка генерируються случйно. Если условие не выполняется, мы его выбрасываем (drop) и загружаем новый слиток. Если слиток проходит в окошко, то дальше мы поворачиваем слиток на конвейере так, чтобы он прошел сквозь окошко, используя действия «rotate» (повернуть по оси y) и «turn» (повернуть по оси х). Если слиток прошел сквозь окошко в трюм, то загружается новый слиток на конвейер. Программа заканчивает выполнение, когда невозможно загружать больше слитков в трюм корабля. Вот код: #include <iostream> #include <time.h> #include <cstdlib> using namespace std; using std::srand; using std::rand; int main () { double Mmax,Vmax,x,y,z,r,a,b,V,M,m,v; srand(time(0)); Mmax=1000+rand()%10000; Vmax=100+rand()%2000; a=4+rand()%3; b=4+rand()%6; V=0; M=0; m=Mmax*(7+rand()%7)/100; v=Vmax*(7+rand()%7)/100; cout<<"(Mmax,Vmax):('<<Mmax<<','<<Vmax<<')"<<endl; cout<<"(A,B):('<<a<<','<<b<<')"<<endl; cout<<endl<<"(x,y,z,r):"<<endl; //------------------------------------------------ while (M<=Mmax-m, V<=Vmax-v); { x=4+rand()%4; y=4+rand()%4; z=4+rand()%4; r=4+rand()%4; cout<<endl; cout<<"('<<x<<','<<y<<','<<z<<','<<r<<')"; cout<<"(Actions with gold: put)"; if ((M+x*y*z*r<=Mmax)&&(V+x*y*z<=Vmax)) { if((x<=a)&&(z<=b)) {cout<<"->Accept"<<endl;M=M+x*y*z*r;V=V+x*y*z;} else if((x<=a)&&(y<=b)){cout<<"->Turn->Accept"<<endl;M=M+x*y*z*r; V=V+x*y*z;} else if((y<=a)&&(z<=b)){cout<<"->Turn->Rotate->Turn->Accept"<<endl;M=M+x*y*z*r;V=V+x*y*z;} else if((x<=b)&&(y<=a)){cout<<"->Turn->Accept"<<endl;M=M+x*y*z*r;V=V+x*y*z;} else if((x<=b)&&(z<=a)){cout<<"->Rotate->Accept"<<endl;M=M+x*y*z*r;V=V+x*y*z;} else cout<<"->Drop"<<endl; } } Не могу понять где ошибка, при запуске кода не могу вводить значения переменных отвечающие за параметры слитка и вместо случайных значений пишуться названия переменных. Заранее спасибо за помощь. |
Автор: feodorv 3.11.2012, 12:28 | ||
Это не код. Вот код:
Добавлено @ 12:37 Строковые литералы отграничены символами "...", а Вы пытаетесь выдумать что-то своё: "...' Всё, что выделено красным цветом - один-единственный строковый литерал, который и будет благополучно напечатан. Это шедевр - эти запятые и точки с запятой... Срочно в ветку http://forum.vingrad.ru/forum/forum-471.html ![]() Добавлено через 12 минут и 1 секунду Здесь тоже не пойми что с чем сравнивается. А скобки то стоят, да не там... |
Автор: Мизеракль 3.11.2012, 13:20 |
Спасибо feodorv за исправления) |