Artys Опубликовано 17 мая, 2012 Жалоба Поделиться Опубликовано 17 мая, 2012 ArtysПонятно почему. В твоих примерах пирамидки меняют форму. То они вписываются в квадрат, то в прямоугольник 1:2. Я исходил из формы, вписывающейся в прямоугольник, согласно твоему примеру Честно говоря я не особо понимаю о чем ты;на картинках есть почти все возможные вариации,просто попробуй просто представить это все,4 шарика,3 в пирамиде,одним бьем по ней,пирамида где угодно и как угодно,4-ый мяч на одной прямой с центральным мячом стол как 2 соединенных квадрата т.е ширина=а =>длина 2*а; пирамида может находиться где угодно на столе,нужно дать ответ сколько шаров попадет в лузы Ссылка на комментарий Поделиться на другие сайты Поделиться
kvazimoda Опубликовано 17 мая, 2012 Жалоба Поделиться Опубликовано 17 мая, 2012 Честно говоря я не особо понимаю о чем ты;на картинках есть почти все возможные вариации,просто попробуй просто представить это все,4 шарика,3 в пирамиде,одним бьем по ней,пирамида где угодно и как угодно,4-ый мяч на одной прямой с центральным мячом стол как 2 соединенных квадрата т.е ширина=а =>длина 2*а; пирамида может находиться где угодно на столе,нужно дать ответ сколько шаров попадет в лузы На сколько я понимаю, если у тебя задаются координаты каждого шара в отдельности, то не факт что шары всегда будут стоять рядом, ведь можно их расставить по разным концам стола. Почему бы не задавать тогда координаты центра пирамиды и угол поворота её относительно какого-то базового положения? Ссылка на комментарий Поделиться на другие сайты Поделиться
Artys Опубликовано 17 мая, 2012 Жалоба Поделиться Опубликовано 17 мая, 2012 На сколько я понимаю, если у тебя задаются координаты каждого шара в отдельности, то не факт что шары всегда будут стоять рядом, ведь можно их расставить по разным концам стола. Почему бы не задавать тогда координаты центра пирамиды и угол поворота её относительно какого-то базового положения? Если это облегчит написание и решение задачи то можно и так попробовать. Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 17 мая, 2012 Жалоба Поделиться Опубликовано 17 мая, 2012 (изменено) Artys просто попробуй просто представить это все,4 шарика,3 в пирамиде,одним бьем по нейТвои пирамиды не так легко представить. Пирамида в биллиарде - треугольник из прижатых друг к другу шаров, то есть равносторонний треугольник. У тебя же ни в одном из примеров равносторонний треугольник шары не образуют. Да и разлетались бы такие шары под углом 60°, а не 90°. Далее, в твоем исходном примере (120,3380), (188,3380), (154,3346) был равнобедренный прямоугольный треугольник. Ну, правда, при диаметрах шаров 68, как у тебя было в исходном задании, у тебя третий шар пересечется с остальными двумя, зато при диаметре шара 48 все будет тип-топ, хотя между двумя шарами будет промежуток. Ну что ж, это лучше, чем пирамидка с шарами, влезающими друг в друга, и разлетаться такие шары всегда будут под углом 90°, как на рисунке. пирамида где угодно и как угодноПирамидка у тебя на рисунках всегда в положении, когда одна из сторон треугольника параллельна борту биллиарда, и повернута всегда на угол, кратный 90°. Я для таких пирамидок и делал программу.Но в твоих новых примерах у тебя пирамидки разных форм, да еще и повернутые на произвольный угол. Тут уже надо считать по аналитической геометрии - по координатам шаров составлять уравнения прямых их разлета и проверять, проходят ли они через какие-нибудь лузы, да еще в том направлении, в котором полетит шар. Конечно, это реализуемо, но простой такую программу я, во всяком случае, точно не назову. Так что предлагаю ограничиться исходным вариантом - пирамидками формы равнобедренного прямоугольного треугольника, у которого гипотенуза расположена параллельно любой из сторон стола. Если шары должны быть диаметра 68, а не 48, то можно при задании расположения шаров просто пропорционально увеличить расстояния между шарами. Изменено 17 мая, 2012 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
benefit Опубликовано 18 мая, 2012 Жалоба Поделиться Опубликовано 18 мая, 2012 И вот с этим помогите плиз ..... ГОРИТ !!!!!!!!!! Выполнить сортировку массива двумя способами. Массивы заполняются случайными числами. Алгоритмы сортировки реализовать в виде функций, возвращающих в качестве результата характеристику трудоемкости алгоритма (например, количество сравнений, времени). Произвести сравнение эффективности алгоритмов. a) Сортировка выбором. Выбирается минимальный элемент в массиве и запоминается. Затем удаляется, а все последующие за ним элементы сдвигаются на один влево. Сам элемент заносится на освободившуюся последнюю позицию. b) Шейкер-сортировка. Процесс движения в прямом и обратном направлении реализовать в виде одного цикла, используя параметр - направление движения (+1/-1) и меняя местами нижнюю и верхнюю границы просмотра. Ссылка на комментарий Поделиться на другие сайты Поделиться
rainbow012 Опубликовано 18 мая, 2012 Жалоба Поделиться Опубликовано 18 мая, 2012 @Тролль, Спасибо Вам большое!!! Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 18 мая, 2012 Жалоба Поделиться Опубликовано 18 мая, 2012 (изменено) benefit Выполнить сортировку массива двумя способами. Массивы заполняются случайными числами. Алгоритмы сортировки реализовать в виде функций, возвращающих в качестве результата характеристику трудоемкости алгоритма (например, количество сравнений, времени). Произвести сравнение эффективности алгоритмов.a) Сортировка выбором. Выбирается минимальный элемент в массиве и запоминается. Затем удаляется, а все последующие за ним элементы сдвигаются на один влево. Сам элемент заносится на освободившуюся последнюю позицию. b) Шейкер-сортировка. Процесс движения в прямом и обратном направлении реализовать в виде одного цикла, используя параметр - направление движения (+1/-1) и меняя местами нижнюю и верхнюю границы просмотра. #include <iostream>#include <ctime>using namespace std;int shsort(int a[],int r){int p=0,k=1,m=0;while(p<r||k<1){ r-=k; for(int j=p+k-1;k*j<k*(r+k-1);j+=k)if(m++,a[j]>a[j+1])swap(a[j],a[j+1]); swap(p,r); k=-k;}return m;}int selsort(int a[],int r){int l=0,m=0;for(int i=l;i<r;i++){ int min=i; for(int j=i+1;j<r;j++)if(m++,a[j]<a[min])min=j; if(min!=i)swap(a[i],a[min]);}return m;}int main(){int n; cout<<"n? "; cin>>n;int *a=new int[n],*b=new int[n],msh,mse; srand(unsigned(time(NULL)));for(int i=0;i<n;i++){a[i]=rand()%1000; b[i]=a[i];}cout<<"source array:"<<endl; for(int i=0;i<n;i++){cout.width(4); cout<<a[i];} cout<<endl;msh=shsort(a,n); mse=selsort(b,n);cout<<"after shaker sort ("<<msh<<" comparisions):"<<endl;for(int i=0;i<n;i++){cout.width(4); cout<<a[i];} cout<<endl;cout<<"after select sort ("<<mse<<" comparisions):"<<endl;for(int i=0;i<n;i++){cout.width(4); cout<<b[i];} cout<<endl;cin.get(); cin.get();} P.S. Подправил, заменив в shsort выражение j=p; на j=p+k-1; Изменено 19 мая, 2012 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
benefit Опубликовано 19 мая, 2012 Жалоба Поделиться Опубликовано 19 мая, 2012 n? 5 source array: 519 577 738 856 801 after shaker sort (15 comparisions): -33686019 519 577 738 801 after select sort (10 comparisions): 519 577 738 801 856 Спасибо большое но что чуть не то ? Ссылка на комментарий Поделиться на другие сайты Поделиться
benefit Опубликовано 19 мая, 2012 Жалоба Поделиться Опубликовано 19 мая, 2012 А с этой что делать не поможешь ? Помогите сделать в c++ Вершина бинарного дерева содержит ключ, строку и два указателя на потомков. Написать функцию определения числа ветвей n-го уровня этого дерева и вывода этих элементов на экран. Ссылка на комментарий Поделиться на другие сайты Поделиться
Artys Опубликовано 19 мая, 2012 Жалоба Поделиться Опубликовано 19 мая, 2012 Троль спасибо большое, сдал задачу! Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 19 мая, 2012 Жалоба Поделиться Опубликовано 19 мая, 2012 Artys Ну и хорошо, условие было чрезвычайно бестолково описано. benefit Да, там мог быть случай, когда сравнение выйдет за предел массива, при тестах у меня все было нормально и я его не заметил. Исправь в shsort выражение j=p; на j=p+k-1; А по бинарному дереву - похожая задача была у NickLid, посмотри ее, у него число узлов на n-уровне, у тебя число ветвей на n-уровне - по сути одно и то же, сколько узлов, столько и ведущих к ним ветвей. Ссылка на комментарий Поделиться на другие сайты Поделиться
benefit Опубликовано 19 мая, 2012 Жалоба Поделиться Опубликовано 19 мая, 2012 Мне ещё 2-е задачи надо помоги уж а то ппц.... оч надо 9-ого сессия 1)Разработать функции работы с приоритетной очередью. Постановка запросов в очередь выполняется по приоритету, снятие - подряд из младших адресов ( начало очереди). Очередь организована на массиве со сдвигом после каждого чтения и на массиве со сдвигом после достижения границы памяти, которая выделена для очереди. Приоритет: min значение числового параметра, при совпадении параметров - LIFO 2)Сформировать двунаправленный список. Удалить из него первый элемент, добавить элемент в конец списка. Ссылка на комментарий Поделиться на другие сайты Поделиться
vampir4eg Опубликовано 19 мая, 2012 Жалоба Поделиться Опубликовано 19 мая, 2012 Тролль благадарю тебя :) Как я понял программа вроде рекурсивно считает. Но можешь ещё обяснить пару строчек ? вроде читал про функции эти но толком не чего не понял, объясни пожайлусто человечиским языком какую роль они тут играют)) #include<stdio.h>float number();float factor();float expr();int main(){puts("Enter number:"); printf("Resault = %f",expr()); getchar(); getchar();}float number(){int res=0; char c;while(1){[b]c=getchar(); if(c>='0'&&c<='9')res=res*10+c-'0'; else{ungetc(c,stdin)[/b]; break;}}return res;}float factor(){float x; char c=getchar();if(c=='('){[b]x=expr(); getchar();} else{ungetc(c,stdin); x=number();[/b]}c=getchar();switch©{ case '*':return x*factor(); case '/':return x/factor(); [b]default:ungetc(c,stdin); return x;[/b]}}float expr(){float x=factor(); char c=getchar();switch©{ case '+':return x+expr(); case '-':return x-expr(); default: ungetc(c,stdin); return x;}} Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 19 мая, 2012 Жалоба Поделиться Опубликовано 19 мая, 2012 (изменено) vampir4eg c=getchar(); if(c>='0'&&c<='9')res=res*10+c-'0'; else{ungetc(c,stdin) Это формирование числа из символов, получаемых с клавиатуры. Получаем с клавиатуры символ, если это цифра, то корректируем число res, превращая код цифры в код однозначного числа (-'0') и добавляя это число к умноженному на 10 первоначальному. Если это не цифра, посылаем код символа обратно в буфер клавиатуры. if(c=='('){x=expr(); getchar();} else{ungetc(c,stdin); x=number();} Если полученный символ - открывающая скобка, то вызываем функцию вычисления выражения и удаляем то, что останется после его вычисления, то есть закрывающую скобку, из буфера клавиатуры, иначе посылаем его обратно в буфер клавивтуры. default:ungetc(c,stdin); return x; Если символ неподходящий (не * или / для factor), то посылаем его назад в буфер клавиатуры. Изменено 19 мая, 2012 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
Иазяв Опубликовано 19 мая, 2012 Жалоба Поделиться Опубликовано 19 мая, 2012 @Тролль, добрый вечер! Сдала экзамен. Сдала хуже, чем могла. Даже преподаватель был шокирован моим ответом, но помогать и вытягивать не стал (за что ему огромная благодарность). Правда, потом провел назидательно-воспитательную беседу, чтоб сильно не огорчалась. Сама виновата. Теперь об интересном. :) Классы затянули - все хочется запихнуть в классы. Легко описываю класс, но иногда возникают проблемы с его реализацией. Наследование пока отложила в долгий ящик. Пробовала и динамические структуры. Возникло множество вопросов. Если Вы будете не против, то через две недели (наконец-то свобода!!!!) я Вам их активненько каждый день буду задавать. Интересуют книги по ООП для лучшего понимания и использования абстракций. Может, подскажите? Какой IDE Вы пользуетесь, чтоб писать код на Паскале? Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 20 мая, 2012 Жалоба Поделиться Опубликовано 20 мая, 2012 (изменено) @Тролль, добрый вечер! Сдала экзамен. Сдала хуже, чем могла. И на старуху бывает проруха... Ничего, главное, что сдала :) Один мой школьный товарищ был очень талантливый парень, но учиться не любил, предпочитал тройки. Когда он получал четверку или пятерку, то говорил "проклятье, опять лишнее выучил!" ;) Двоек у него, правда, тоже не было... :) Но это не о тех классах ;) В C++ классы - способ организации данных, раскладка имущества программы по коробочкам, шкатулочкам. Вообще программы пишутся на русском языке и потом переводятся на C++, он только система условных обозначений. Классы - это обозначения коробочек. Ну и система "коробочек" для частей программы позволяет легче ориентироваться в хозяйстве и не путать вещи. Но не надо считать, что главное в хозяйстве - коробочки ;) Главное - придумать, как что-то сделать, а классы или просто функции - это уже оформление. Насчет книжек по ООП советовать не возьмусь, не в курсе новых. Pascal... Вообще-то языка Pascal, как определенного языка, давно нет. Turbo Pascal был близок к исходному варианту Pascal, придуманному Виртом для обучения своих студентов, но он сейчас устарел на 15-20 лет - почти вечность. Сейчас есть группа паскалеподобных языков, очень сильно расширенных по сравнению с исходным вариантом. Удобная и простая среда для программирования - PascalABC.NET на одноименном сайте. Вообще его, зная основы C++, освоить очень легко. Но большого смысла нет - он хорош как переходная ступень к C++, а идти от C++ к Pascal есть смысл только чтобы познакомиться с Pascal. Изменено 20 мая, 2012 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
Anastasija Опубликовано 20 мая, 2012 Жалоба Поделиться Опубликовано 20 мая, 2012 Здравствуйте, помогите пожалуйста с заданием, осталось пару дней до сдачи я совсем не могу ничего придумать=( Надо написать шашки на Visual C++ используя Dark GDK(желательно), мне нужно хотя бы просто доску нарисовать и расставить шашки, там уже, я думаю, сама более менее разберусь(ну если не разберусь, спрошу еще ), для меня самое трудное начать и прикрутить графику=( Ах да, нужно обязательно ООП, классы по полной программе. Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 20 мая, 2012 Жалоба Поделиться Опубликовано 20 мая, 2012 Anastasija Ну, вот тут есть исходный код игры на Dark GDK, где поле с клеточками и по нему ползает червяк. Требует для работы, между прочим, NET.Framework 3.5. .БОльшим, чем эта ссылка, помочь не могу. Ссылка на комментарий Поделиться на другие сайты Поделиться
Anastasija Опубликовано 21 мая, 2012 Жалоба Поделиться Опубликовано 21 мая, 2012 Спасибо большое, посмотрю, NET.Framework 3.5. у меня есть слава богу=) Ссылка на комментарий Поделиться на другие сайты Поделиться
wedma Опубликовано 21 мая, 2012 Жалоба Поделиться Опубликовано 21 мая, 2012 Помогите, пожалуйста, написать программы на С++. Нужно до четверга =( 1) Составить программу, моделирующую перемешивание домино. Принять во внимание, что меняться местами могут лишь соседние элементы. Показать процесс перемешивания пошагово. Попробуйте составить функцию, делящую затем все домино поровну между 2-мя участниками игры и делающую первый ход одного из участников. 2) Заполнить массив из структур, написать и выполнить программу, используя функции. 1. Описать структуру с именем AEROFLOT, содержащую следующие поля: • название пункта назначения рейса; • номер рейса; • тип самолета. 2. Написать программу, выполняющую следующие действия: • ввод с клавиатуры данных в массив, состоящий из семи элементов типа AEROFLOT; записи должны быть упорядочены по возрастанию номера рейса; • вывод на экран номеров рейсов и типов самолетов, вылетающих в пункт назначения, название которого совпало с названием, введенным с клавиатуры; • если таких рейсов нет, выдать на дисплей соответствующее сообщение. 3) Для хранения данных о планшетных сканерах описать структуру вида struct scan_info{ char model[25]; // наименование моделиint price; // ценаdouble x_size; // горизонтальный размер области сканир-ияdouble y_size; // вертикальный размер области сканированияint optr; // оптическое разрешениеint grey; // число градаций серого}; Написать функцию, которая динамически выделяет память под массив структур (не меньше шести элементов), заполняет его данными в режиме диалога и записывает массив в бинарный файл. Структура файла: в первых двух байтах размещается значение типа int, определяющее количество сделанных в файл записей; далее без пропусков размещаются записи о сканерах, Написать функцию, которая извлекает данные о сканере из описанного выше бинарного файла в структуру типа scan_info. Обязательный параметр — номер требуемой записи. Функция должна возвращать нулевое значение, если чтение прошло успешно, и – 1 в противном случае. Привести пример программы, создающей файл с данными о сканерах (данные вводятся с клавиатуры) из не менее восьми записей и осуществляющий вывод на дисплей данных о требуемой записи. Все необходимые данные для функций должны передаваться им в качестве параметров. Использование глобальных переменных в функциях не допускается. и еще одна Написать программу, моделирующую лабиринт. В качестве символа стен выберите символ «#». В лабиринте должно быть не более N входов и выходов. Попробуйте составить рекурсивную функцию, которая будет искать выход из лабиринта, начиная с некоторой начальной позиции. Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 22 мая, 2012 Жалоба Поделиться Опубликовано 22 мая, 2012 (изменено) wedma 2. #include <iostream>#include <string.h>using namespace std;main(){const int n=7; int i,j,k=0,los; char Name[20]; bool b;struct AEROFLOT{char TARGET[20],TYP[20];unsigned TRIP;}TABL[n],T;for(i=0;i<n;i++){ cout<<endl<<"Target? "; cin.getline(TABL[i].TARGET,20); if(!strlen(TABL[i].TARGET))break; cout<<"Type? "; cin.getline(TABL[i].TYP,20); cout<<"Trip? "; cin>>TABL[i].TRIP; cin.getline(Name,20); k++;}for(i=0;i<k;i++)for(j=0;j<k-i-1;j++) if(TABL[j].TRIP>TABL[j+1].TRIP){T=TABL[j];TABL[j]=TABL[j+1];TABL[j+1]=T;}cout<<endl<<"Where (target)? "; cin.getline(Name,20); b=true;for(i=0;i<k;i++)if(!strcmp(TABL[i].TARGET,Name)) {cout<<endl<<"Trip: "<<TABL[i].TRIP<<" \t"<<"Type: "<<TABL[i].TYP; b=false;}if(b)cout<<endl<<"No such trip!"; cout<<endl<<endl; cin.get();} Чтобы не вводить все максимально допустимые семь рейсов, можно вместо очередного пункта назначения просто нажать Enter. 1,3,4. Посмотри ссылки на решения в ЛС. Изменено 22 мая, 2012 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
benefit Опубликовано 22 мая, 2012 Жалоба Поделиться Опубликовано 22 мая, 2012 (изменено) Троль спасай )))) !!!!! i Уведомление:Вот давайте только без истерик, Вам никто ничего не обязан. Сами поучиться не пробовали? Изменено 22 мая, 2012 пользователем DJFlint Ссылка на комментарий Поделиться на другие сайты Поделиться
wedma Опубликовано 22 мая, 2012 Жалоба Поделиться Опубликовано 22 мая, 2012 @Тролль, спасибо большое) а вы не объясните еще, что значит "it seems that this file has not been built yet. Do you want to build it now?" выдает это при каждой попытке запустить программу. если нажать да, то ничего не делает, если нажать нет, то вылазит окошко.. и там тоже ничего не понятно =( типа нажмите любую клавишу и внизу выходит это Checking for existence: Untitled1.exe Checking for existence: Untitled1.exe Executing: D:\Учебное\2 курс\Программирование\CodeBlocks/cb_console_runner.exe "Untitled1.exe" (in ) Process terminated with status 0 (2 minutes, 34 seconds) Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 22 мая, 2012 Жалоба Поделиться Опубликовано 22 мая, 2012 (изменено) wedma Это, скорее всего, неправильны какие-то настройки среды CodeBlocks... Используй лучше среду Dev-C++ - она проще и компактнее. Там никаких проблем точно не возникнет. benefit Сформировать двунаправленный список. Удалить из него первый элемент, добавить элемент в конец спискаНу, если писать компактно, это будет так: .#include <iostream>#include <list>using namespace std;int main(){const int n=5; list<int> ml; list<int>::iterator it;for(int i=1;i<=n;i++)ml.push_back(i);for(it=ml.begin();it!=ml.end();++it)cout<<" "<<*it; cout<<endl;ml.pop_front(); ml.push_back(n+1);for (it=ml.begin();it!=ml.end();++it)cout<<" "<<*it; cout<<endl; cin.get();} Сформирует список из чисел 1 2 3 4 5 (задано в n), выдаст его на экран, уберет первый элемент, добавит в хвост списка число 6 и снова выдаст на экран, теперь уже как 2 3 4 5 6. Изменено 22 мая, 2012 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
Lixxard Опубликовано 22 мая, 2012 Жалоба Поделиться Опубликовано 22 мая, 2012 (изменено) помогите пожалуйста! нужно написать программу на c++, суть в следующем: Анкета для опроса населения содержит следующую информацию: имя; возраст; пол; образование (начальное, среднее, высшее). ответ на вопрос анкеты, который либо ДА, либо НЕТ. Составить программу, которая: обеспечивает начальный ввод анкет и формирует из них линейный список в алфавитном порядке; на основе анализа анкет выдает ответы на следующие вопросы: а) сколько мужчин старше 40 лет, имеющих высшее образование, ответили ДА на вопрос анкеты; а) сколько женщин моложе 30 лет, имеющих среднее образование, ответили НЕТ на вопрос анкеты; а) сколько мужчин моложе 25 лет, имеющих начальное образование, ответили ДА на вопрос анкеты; производит вывод всех анкет и ответов на вопросы. Изменено 22 мая, 2012 пользователем Lixxard Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти