Toxa1234 Опубликовано 11 апреля, 2012 Жалоба Поделиться Опубликовано 11 апреля, 2012 @Тролль, Блин Троль я тебя люблю. Спасибо огромнейшее) Ссылка на комментарий Поделиться на другие сайты Поделиться
NickLid Опубликовано 12 апреля, 2012 Жалоба Поделиться Опубликовано 12 апреля, 2012 Помогите, пожалуйста! Написать на С++. Разработать программу формирования очереди, содержащей целые числа, и упорядочивания по возрастанию элементов в этой очереди. В процессе упорядочивания элементы очереди перемещаться не должны. Ссылка на комментарий Поделиться на другие сайты Поделиться
Ego Drama Опубликовано 12 апреля, 2012 Жалоба Поделиться Опубликовано 12 апреля, 2012 Помогите, пожалуйста! Написать на С++. Разработать программу формирования очереди, содержащей целые числа, и упорядочивания по возрастанию элементов в этой очереди. В процессе упорядочивания элементы очереди перемещаться не должны. Имеет смысл через ordered map (std::map): #include <iostream>#include <map>#include <exception>namespace Queue { class Queue { private: std::map<int, int> queue; public: Queue& unshift(int const &key) { std::map<int, int>::iterator value = queue.find(key); if ( value == queue.end() ) { queue.insert(std::pair<int, int>(key, 1)); } else { value->second++; } return *this; } int shift() { if ( not queue.empty() ) { int value = queue.begin()->first; if ( 0 == --(queue.begin()->second)) { queue.erase(value); } return value; } else { throw excp_queue_is_empty; } } int length() { return static_cast<int>(queue.size()); } Queue& operator << (int const &k) { return unshift(k); } Queue& operator >> (int &v) { v = shift(); return *this; } private: class exceptionQueueIsEmpty: public std::exception { virtual const char* what() const throw() { return "Queue is empty!"; } } excp_queue_is_empty; }; Queue& operator << (int &v, Queue& queue) { v = queue.shift(); return queue; } Queue& operator >> (int const &k, Queue& queue) { return queue.unshift(k); }};main () { Queue::Queue queue; // --------------------------------------- // add items to queue // --------------------------------------- queue.unshift(10).unshift(10).unshift(1); queue << 3 << 3 << 777; (7 >> (2 >> (7 >> queue))); // --------------------------------------- // --------------------------------------- // get items from queue // --------------------------------------- int a = queue.shift(), b, c; queue >> b >> c; std::cout << a << std::endl << b << std::endl << c << std::endl << queue.shift() << std::endl; // ---------------------------------------} Output:1233 Ссылка на комментарий Поделиться на другие сайты Поделиться
NickLid Опубликовано 12 апреля, 2012 Жалоба Поделиться Опубликовано 12 апреля, 2012 @Ego Drama,а вас не затруднит эту программу сделать попроще, а то не все понятно что происходит. Ссылка на комментарий Поделиться на другие сайты Поделиться
Ego Drama Опубликовано 12 апреля, 2012 Жалоба Поделиться Опубликовано 12 апреля, 2012 @Ego Drama,а вас не затруднит эту программу сделать попроще, а то не все понятно что происходит. Не печальтесь, всё просто. Лишь std::map осилить стоит. Истина в том с STL, значительно проще писать чем без него :) Я бы даже сказал, что писать на C++ без STL и boost джентльмену не порядочно. Девочки любить не будут. Вот комментарии прочтите: #include <iostream>#include <map>#include <exception>namespace Queue { class Queue { private: std::map<int, int> queue; // ключ (1-ый int) --- значение элемента в очереди // значение (2-ой int) --- количество элементов с данным значением в очедери public: // метод добавления элемента в очередь Queue& unshift(int const &key) { std::map<int, int>::iterator value = queue.find(key); // попытка найти значение (key) в очереди if ( value == queue.end() ) { // значения нет queue.insert(std::pair<int, int>(key, 1)); // вставляем в map значение и количество --- 1 } else { value->second++; // если значение есть, то инкрементируем количество } return *this; } // метод получениен элемента из очереди int shift() { if ( not queue.empty() ) { // если map НЕ пустой int value = queue.begin()->first; // запоминаем значение первого элемента if ( 0 == --(queue.begin()->second)) { // декрементируем количество и если 0, то queue.erase(value); // удаляем значение из map'а } return value; // возвращаем сохранённое ранее значение } else { throw excp_queue_is_empty; // если map пустой, извлекать нечего --- } // генерируем исключение } // перегружаем операции, для записи и чтения из очереди для Queue // реализация через shift/unshift Queue& operator << (int const &k) { return unshift(k); } Queue& operator >> (int &v) { v = shift(); return *this; } private: // определяем исключение, которое бросаем выше class exceptionQueueIsEmpty: public std::exception { virtual const char* what() const throw() { return "Queue is empty!"; } } excp_queue_is_empty; }; // перегружаем операции, для записи и чтения из очереди для int // во имя порядка и справедливости Queue& operator << (int &v, Queue& queue) { v = queue.shift(); return queue; } Queue& operator >> (int const &k, Queue& queue) { return queue.unshift(k); }};main () { Queue::Queue queue; // --------------------------------------- // варианты добавления элементов в очередь // --------------------------------------- queue.unshift(10).unshift(10).unshift(1); queue << 3 << 3 << 777; // раздражаемся, ибо изменять ассациативность операций крестики не умею (7 >> (2 >> (7 >> queue))); // --------------------------------------- // --------------------------------------- // варианты получения элементов из очереди // --------------------------------------- int a = queue.shift(), b, c; queue >> b >> c; std::cout << a << std::endl << b << std::endl << c << std::endl << queue.shift() << std::endl; // ---------------------------------------} Viam supervadet vadens! 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
NickLid Опубликовано 13 апреля, 2012 Жалоба Поделиться Опубликовано 13 апреля, 2012 @Ego Drama,спасибо вам огромное. Ссылка на комментарий Поделиться на другие сайты Поделиться
temich5000 Опубликовано 13 апреля, 2012 Жалоба Поделиться Опубликовано 13 апреля, 2012 Привет всем !!!! Помогите мне, пожалуйста, сделать программу на си++ Есть два текстовых файла. Объединить их в третий простым дописыванием данных одного файла в конец другого. Кроме механизма объединения необходимо написать функции, которые будут записывать данные в файл и высчитывать данные из файла Ссылка на комментарий Поделиться на другие сайты Поделиться
Fisher Опубликовано 14 апреля, 2012 Жалоба Поделиться Опубликовано 14 апреля, 2012 Здравствуйте. Помогите пожалуйста с задачей на C++: Используя очередь, решить задачу. TYPE имя = (Анна,..., Яков); дети = АRRAY[имя, имя] OF BOOLEAN; потомки = FILE OF имя; Считая заданным имя И и массив Д типа дети (Д [ X, Y ] = TRUE, если человек по имени Y является ребенком человека по имени X), записать в файл П типа потомки имена всех потомков человека с именем И в следующем порядке: сначала - имена всех его детей, затем - всех его внуков, затем - правнуков и т.д. Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 14 апреля, 2012 Жалоба Поделиться Опубликовано 14 апреля, 2012 (изменено) temich5000 #include<iostream>#include<fstream>#include<string>using namespace std;void input(char s[]){string p; cout<<"string? "; getline(cin,p);ofstream ifs(s); ifs<<p; ifs.close();}void output(char s[]){ifstream ifs(s); cout<<"out:"<<endl;while(!ifs.eof()){string p; getline(ifs,p); cout<<p;};cout<<endl; ifs.close();}int main(){char s1[]="input1.txt", s2[]="input2.txt", s3[]="output.txt";input(s1); input(s2);ifstream ifs1(s1), ifs2(s2); ofstream ofs(s3);while(!ifs1.eof()){string p; getline(ifs1,p); ofs<<p;};while(!ifs2.eof()){string p; getline(ifs2,p); ofs<<p;};ifs1.close(); ifs2.close(); ofs.close(); output(s3); cin.get();} Не совсем ясно, то ли файлы есть, то ли их нет и надо создавать при помощи функции. Так или иначе, программа создает два файла input1.txt и input2.txt с вводимыми с клавиатуры строками при помощи функции input, затем считывает их и объединяет в один файл output.txt переписыванием в него содержимого первого файла и дописыванием к нему содержимого второго файла, после чего выводит содержимое получившегося файла при помощи функции output. Изменено 14 апреля, 2012 пользователем Тролль 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 14 апреля, 2012 Жалоба Поделиться Опубликовано 14 апреля, 2012 NickLid Разработать программу формирования очереди, содержащей целые числа, и упорядочивания по возрастанию элементов в этой очереди. В процессе упорядочивания элементы очереди перемещаться не должны.По твоей просьбе - более простой код программы.#include <iostream>#include <list>using namespace std;int main(){list<int> qu; list<int>::iterator it;int n; cout<<"Number of elements? "; cin>>n; cout<<"Enter values: ";for(int i=0;i<n;i++){int k; cin>>k; qu.push_back(k);} qu.sort();for(it=qu.begin();it!=qu.end();++it)cout<<" "<<*it; cout<<endl; cin.get(); cin.get();} Ссылка на комментарий Поделиться на другие сайты Поделиться
medvedkotracer Опубликовано 14 апреля, 2012 Жалоба Поделиться Опубликовано 14 апреля, 2012 Доброго времени суток. Прошу помощи. Извиняюсь, если что-то подобное уже писали. Нужно написать на Си Задание: Ввести массив вещественных чисел. Вывести все локальные максимумы и глобальный максимум. Заранее благодарю Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 14 апреля, 2012 Жалоба Поделиться Опубликовано 14 апреля, 2012 (изменено) medvedkotracer #include <stdio.h>int main(){int n,i; float m,mm,a[100]; printf("Number of elements? "); scanf("%d",&n);printf("Enter values: \n"); for(i=1;i<=n;i++)scanf("%f",&a[i]);printf("Local maximums:\n"); a[0]=a[1]; a[n+1]=a[n]; m=mm=a[0];for(i=1;i<=n;i++)if(a[i]>=a[i-1]&&a[i]>=a[i+1]){m=a[i]; printf("%10.3f",m); if(m>=mm)mm=m;}printf("\nMaximum maximorum:\n%10.3f\n",mm); getchar(); getchar(); return 0;} Изменено 14 апреля, 2012 пользователем Тролль 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
medvedkotracer Опубликовано 15 апреля, 2012 Жалоба Поделиться Опубликовано 15 апреля, 2012 @Тролль,благодарю, всё работает. можно ещё одно задание попросить сделать? Опять на C. Задание такое: Ввести целое число N. Вывести число, полученное из введенного инверсией каждого 4-го двоичного разряда ( начиная с младших ) Ещё раз благодарю заранее Ссылка на комментарий Поделиться на другие сайты Поделиться
Ego Drama Опубликовано 15 апреля, 2012 Жалоба Поделиться Опубликовано 15 апреля, 2012 [...] Опять на C. Задание такое: Ввести целое число N. Вывести число, полученное из введенного инверсией каждого 4-го двоичного разряда ( начиная с младших ) Ещё раз благодарю заранее Побитовый xor же (4 байта инвертирую): #include <stdio.h>int main(void) { int a; scanf("%d", &a);// scanf("0x%x", &a); printf("0x%x\n", 0x10101010^a); return 0;} Ссылка на комментарий Поделиться на другие сайты Поделиться
temich5000 Опубликовано 16 апреля, 2012 Жалоба Поделиться Опубликовано 16 апреля, 2012 спасибо большое за программу Тролль !!! А можешь ее чуть подробнее обьяснить ??? Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 16 апреля, 2012 Жалоба Поделиться Опубликовано 16 апреля, 2012 (изменено) temich5000 Тут вообще-то и объяснять нечего... #include<iostream>#include<fstream>#include<string>using namespace std;void input(char s[]){//функция ввода текста в файл с клавиатурыstring p; cout<<"string? "; getline(cin,p);//вводим в строку p текст с клавиатурыofstream ifs(s); ifs<<p; ifs.close();//объявляем поток вывода ifs с файлом с именем из s,// выводим в него строку и закрываем поток}void output(char s[]){//функция вывода текста из файла на экранifstream ifs(s); cout<<"out:"<<endl;//объявляем поток ввода ifs с файлом с именем из swhile(!ifs.eof()){string p; getline(ifs,p); cout<<p;};// пока не конец файла, построчно выводим текст из потока ifs в строку p// и выводим эту строку на экранcout<<endl; ifs.close();//переводим строку на экране и закрываем поток}int main(){char s1[]="input1.txt", s2[]="input2.txt", s3[]="output.txt";//строки с именами файловinput(s1); input(s2);//дважды вызвали функцию для создания файлов с текстамиifstream ifs1(s1), ifs2(s2); ofstream ofs(s3);//объявили два потока ввода ifs1 и ifs2 - файлы с именами из строк s1 и s2// и поток вывода ofs в файл с именем из строки s3while(!ifs1.eof()){string p; getline(ifs1,p); ofs<<p;};// пока не конец файла, построчно вводили текст из потока ifs1 в строку p// и выводили его в поток ofswhile(!ifs2.eof()){string p; getline(ifs2,p); ofs<<p;};//то же для потоков ifs2 и ofsifs1.close(); ifs2.close(); ofs.close();//закрыли все потоки ввода и выводаoutput(s3);//вызвали функцию вывода на экран из файла с именем из строки s3cin.get();//подождали нажатия Enter для закрытия окна вывода} Изменено 16 апреля, 2012 пользователем Тролль 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
temich5000 Опубликовано 16 апреля, 2012 Жалоба Поделиться Опубликовано 16 апреля, 2012 Спасибо огромное Тролль !!! Ссылка на комментарий Поделиться на другие сайты Поделиться
Шёпот Опубликовано 17 апреля, 2012 Жалоба Поделиться Опубликовано 17 апреля, 2012 Ребят, задание. Светить его здесь не хочется, т.к. препод вполне себе может позволить поискать в интернете свои билеты (= Очень хорошо, если поможете с заданием в течение недели. Готов обговорить вознаграждение с моей стороны. Пожалуйста, напишите в ЛС кто может помочь. Задание выдадут сегодня вечером, скорее всего по языку C. Это заочка, у меня сейчас большие напряги по работе, поэтому и прошу, я железячник в основном... программирование не совсем моё (= Ссылка на комментарий Поделиться на другие сайты Поделиться
NickLid Опубликовано 17 апреля, 2012 Жалоба Поделиться Опубликовано 17 апреля, 2012 NickLidПо твоей просьбе - более простой код программы. #include <iostream>#include <list>using namespace std;int main(){list<int> qu; list<int>::iterator it;int n; cout<<"Number of elements? "; cin>>n; cout<<"Enter values: ";for(int i=0;i<n;i++){int k; cin>>k; qu.push_back(k);} qu.sort();for(it=qu.begin();it!=qu.end();++it)cout<<" "<<*it; cout<<endl; cin.get(); cin.get();} А можете для неё сделать комментарии. Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 17 апреля, 2012 Жалоба Поделиться Опубликовано 17 апреля, 2012 (изменено) NickLid #include <iostream>#include <list>using namespace std;int main(){list<int> qu; list<int>::iterator it;//объявляем для использования в качестве очереди список qu с элементами// целого типа и обобщенный указатель (итератор) на его элемент для перебора их в циклеint n; cout<<"Number of elements? "; cin>>n; cout<<"Enter values: ";//вводим количество элементов и выводим подсказку для ввода их значенийfor(int i=0;i<n;i++){int k; cin>>k; qu.push_back(k);}//в цикле вводим с клавиатуры и загружаем в хвост очереди значения элементовqu.sort();//сортируем эти значенияfor(it=qu.begin();it!=qu.end();++it)cout<<" "<<*it; cout<<endl;//перебираем элементы очереди и выводим их на экранcin.get(); cin.get();//задерживаем окно вывода на экране до нажатия Enter} Изменено 17 апреля, 2012 пользователем Тролль 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
NickLid Опубликовано 17 апреля, 2012 Жалоба Поделиться Опубликовано 17 апреля, 2012 Спасибо огромное))) Ссылка на комментарий Поделиться на другие сайты Поделиться
Riki_Tiki_Tavi Опубликовано 23 апреля, 2012 Жалоба Поделиться Опубликовано 23 апреля, 2012 Всем привет. Помогите пожалуйста написать Шифр Цезаря на Pascal(Зашифровать в файл, и расшифровать з файла). Только англ алфавит, пусть пользователю покажет перед началом весь алфавит, потом пусть пользователь сам задает ключ шифровки. Заранее очень благодарен! Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 23 апреля, 2012 Жалоба Поделиться Опубликовано 23 апреля, 2012 (изменено) Хм, товарищ Верховный Главнокомандующий Цезарь шифровал свои приказы подстановочным кодом с простым сдвигом букв по кольцу. Ключ шифровки в шифре Цезаря - одно число: сдвиг букв в кольце. Если задавать произвольные подстановки букв, то это будет не шифр Цезаря, а просто подстановочный шифр, так что неясно, зачем печатать алфавит. Но просят - напечатаем... Кстати, сам Цезарь использовал всегда ключ 3, поскольку считал, что варвары и так не догадаются, но у нас по заданию пользователь задает свой. var s,r:string; c:char; i,k:integer; f:text;beginfor c:='A' to 'Z' do write©; writeln;write('Name of the file? '); readln®; assign(f,r);write('Key(number)? '); readln(k);repeat write('Read® or Write(W)? '); readln©; c:=upcase© until c in['W','R'];if c='W' then begin rewrite(f); write('Text? '); readln(s); for i:=1 to length(s) dobeginc:=upcase(s[i]);if c in['A'..'Z'] then c:=chr((ord©+k-13)mod 26+65);write(f,c)end endelse begin reset(f); while not eof(f) dobeginread(f,c);if c in['A'..'Z'] then c:=chr((ord©-k-13)mod 26+65);write©end; writeln; writeln('Press the key "Enter"'); readln end;close(f);end. Изменено 23 апреля, 2012 пользователем Тролль 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Шёпот Опубликовано 25 апреля, 2012 Жалоба Поделиться Опубликовано 25 апреля, 2012 Мужики! Требуется помощь. Я выше уже писал, просто задание выдали только вчера, но и срок теперь до 14 мая. Фото задания в прикреплённом файле. Все слова вошли, кроме нижнего левого угла, там слово алгоритм не вошло. Я на индивидуалке (т.е. по некоторым предметам мне даже лекции не читают), от такого задания у меня сразу глаза на лоб полезли и там окопались XD Также преподаватель сказал, чтобы готовый вариант программы был скомпиллирован "вместе с библиотеками" - типа чтобы можно было запускать там, где не установлен С++ или стоит другая версия. Выполнить задание можно на С++ (желательно). Теоретически можно выполнить и на другом языке, но только в том случае, если это будет оптимальней. Программа, как мне кажется, не из лёгких, т.ч. за помощь я готов вознаградить материально. Ссылка на комментарий Поделиться на другие сайты Поделиться
NickLid Опубликовано 25 апреля, 2012 Жалоба Поделиться Опубликовано 25 апреля, 2012 Доброе времени суток! Помогите пожалуйста сделать программу на тему Дерево. На С++. Используя рекурсию, подсчитать число вершин на n-ом уровне непустого дерева Т (корень считать вершиной нулевого уровня). Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти