Всем доброго времени суток, требуется помощь в решении задачи на c++ ЗАДАЧА 7. Решить задачу 5, но с учётом вложенности скобок одного вида. ЗАДАЧА 5. Проверить правильность расстановок скобок в скобочном выражении, использующем скобки вида: “(”, “)”, “{”, “}”, “[”, “]”. Требование вложенности скобок разного вида не учитывать, т. е., например, выражения “({})[]” и “([{()}]}” – правильны
Решение задачи 5 и 7 в одном флаконе: PHP: #include <iostream> #include <string> #include <vector> #include <algorithm> #include <stdexcept> class bracket_exception : public std::runtime_error { public: bracket_exception(const std::string& message) :std::runtime_error(message) { } }; class bracket { public: bracket(char open, char close) :open_(open), close_(close) { } char get_open() const { return open_; } char get_close() const { return close_; } private: char open_, close_; }; class expression_checker { public: typedef std::vector<bracket> bracket_list; public: explicit expression_checker(const bracket_list& available_brackets) :brackets_(available_brackets) { } void check_string(const std::string& str, bool only_similar_brackets_can_nest, bool ignore_unknown_characters) const { std::vector<bracket> opened_brackets; for(std::string::const_iterator it = str.begin(); it != str.end(); ++it) { char current = *it; bracket_list::const_iterator br_it = std::find_if(brackets_.begin(), brackets_.end(), open_bracket_finder(current)); if(br_it == brackets_.end()) { br_it = std::find_if(brackets_.begin(), brackets_.end(), close_bracket_finder(current)); if(br_it == brackets_.end()) { if(ignore_unknown_characters) continue; throw bracket_exception("Unknown character in expression: " + std::string(1, current)); } if(!opened_brackets.empty() && opened_brackets.back().get_close() == current) { opened_brackets.pop_back(); continue; } else { throw bracket_exception("Unmatched bracket: " + std::string(1, current)); } } if(only_similar_brackets_can_nest) { if(!opened_brackets.empty() && opened_brackets.back().get_open() != current) throw bracket_exception("Only similar brackets can nest"); } opened_brackets.push_back(*br_it); } if(!opened_brackets.empty()) throw bracket_exception("Some brackets are open"); } private: struct open_bracket_finder { public: explicit open_bracket_finder(char open) :open_(open) { } bool operator()(const bracket& item) const { return item.get_open() == open_; } private: char open_; }; struct close_bracket_finder { public: explicit close_bracket_finder(char close) :close_(close) { } bool operator()(const bracket& item) const { return item.get_close() == close_; } private: char close_; }; const bracket_list brackets_; }; void check_brackets(const expression_checker::bracket_list& available_brackets, const std::vector<std::string>& samples, bool only_similar_brackets_can_nest) { const expression_checker checker(available_brackets); for(std::vector<std::string>::const_iterator it = samples.begin(); it != samples.end(); ++it) { try { checker.check_string(*it, only_similar_brackets_can_nest, true); std::cout << "\"" << (*it) << "\" OK!" << std::endl; } catch(const bracket_exception& e) { std::cerr << "\"" << (*it) << "\" error: " << e.what() << std::endl; } } } int main() { std::vector<std::string> samples; samples.push_back("({})[]"); samples.push_back("{[{()}]}"); samples.push_back("[][]{{}}((()))"); samples.push_back("([{()}]}"); samples.push_back("([{()}]))"); samples.push_back("()[{([)}]"); samples.push_back("[[["); //Доступные скобки expression_checker::bracket_list available_brackets; available_brackets.push_back(bracket('(', ')')); available_brackets.push_back(bracket('[', ']')); available_brackets.push_back(bracket('{', '}')); //Проверяем скобки по заданию 5 (любые могут быть вложенными) std::cout << "Task 5" << std::endl; check_brackets(available_brackets, samples, false); std::cout << std::endl << "Task 7" << std::endl; //Проверяем скобки по заданию 7 (только одинаковые могут быть вложенными) check_brackets(available_brackets, samples, true); return 0; }
Добрый вечер!!Помогите решить задание))Ничего не получается(( 4. Решить задачу 2, дополнительно найдя порядковый номер первой скобки, нарушающей правильность расстановки скобок. 2. Написать программу, которая определяет, является ли скобочное выражение правильным. Примеры правильных скобочных выражений: (), (())(), ()(), ((())) и неправильных: )(, ())((), (, )))), ((()). Указание: рассматриваем последовательно каждый символ заданной строки слева направо. Если очередной символ – левая скобка, то размещаем ее в стеке, если правая – то извлекаем элемент из стека (это обязательно должна быть левая скобка). После рассмотрения всей строки, если выражение правильно, стек должен оказаться пустым.
Pashtet123 Писал в блокноте на планшете Code: program skobki; const N = 50; var stack: array[1..N] of char; ind,i: integer; str: string; correct: boolean; procedure push(symb: char); begin stack[ind] := symb; inc(ind); end; function pop:Char; begin dec(ind); Result := stack[ind]; end; function isEmpty:Boolean; begin if ind = 1 then Result := true else Result := false; end; begin ind := 1; Readln(str); correct := true; for i:= 1 to length(str) do begin if str[i] = '(' then push(str[i]); if str[i] = ')' then begin if not isEmpty then pop else begin correct := false; WriteLn('incorrect'); end; end; end; if correct then WriteLn('correct'); readln; end.
Помогите еще одну задачку решить!!!!Плиззз Дан массив целых чисел. Выяснить, совпадает ли количество отрицательных чисел с положительными. Если нет, определить количество несовпадений.
C# Code: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { int[] numbers = { 0, 1, -2, 3, 4, 5, 6 }; var numNegative = from num in numbers where num < 0 select num; var numPositive = from num in numbers where num > 0 select num; if (numNegative.Count() == numPositive.Count()) { Console.WriteLine("equal"); } else { Console.WriteLine("Unequal. {0} diffs", Math.Abs(numNegative.Count() - numPositive.Count())); } } } }
Помогите пжалста) Реализовать рекурсивную функцию, которая возвращает сумму n последних элементов массива
И вот эта задачка очень нужна!! Реализовать рекурсивную функцию, которая возвращает значение true, если натуральное число, поступившее на вход программы, является простым, и, значение false в противном случае. Указание: натуральное число (кроме 1) является простым, если оно делится без остатка только на 1 и на самое себя
Требуется вывести на экран меню, состоящее из следующих пунктов: 1. ввод матрицы с клавиатуры, 2. ввод матрицы из файла, 3. вычисление характеристики, 4. преобразование матрицы, 5. печать матрицы, 6. выход. и обеспечить его функционирование. Внутри программы характеристика оформляется в виде метода с передачей параметров по значению, который возвращает значение булевского типа; преобразование в виде метода с передачей параметров по ссылке. Необходимо отслеживать, был ли произведен ввод данных до выбора пунктов меню, которые обрабатывают матрицу. А задание к этому меню следующее: Средние арифметические значения элементов всех столбцов матрицы с нечетными номерами равны. Преобразование. Получить новую матрицу В, элемент bij которой равен произведению элементов akl исходной матрицы, где k меняется от i до n, а l – от 1 до j.
На C# Code: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication24 { class Program { static void Main(string[] args) { Console.Title = ""; Console.Write("Введите количество элементов массива: "); int n = int.Parse(Console.ReadLine()); Console.WriteLine(""); int[] Array; Array = new int[n]; Random rand = new Random(); Console.WriteLine(""); Console.Write("Элементы массива: "); for (int i = 0; i < Array.Length; i++) { Array[i] = rand.Next(-100, 100); Console.Write("{0}, ", Array[i]); } Console.WriteLine(""); Console.Write("\b\b "); Console.WriteLine(""); int plus = 0; int minus = 0; for (int i = 0; i < Array.Length; i++) { Console.BackgroundColor = ConsoleColor.Blue; if (Array[i] < 0) {minus++;} else {plus++;} } int digit = Math.Abs(plus - minus); if (minus != plus) { Console.Write("Разница: "+ digit+ " Положительные: " + plus +" Отрицательные: " + minus); } Console.Write("\b\b "); Console.ReadLine(); } } } Конечно, решение уже есть, но пусть будет как альтернатива кода выше.
Задача следующая: в пространстве задано некоторое множество точек. Выбрать из них такие четверки точек, которые лежат в одной плоскости.
Замечу, что в логике присутствует ошибка: нельзя инкрементировать plus по условию "неотрицательное число", т.к. тогда к положительным отнесется и число 0, что будет неверным.
Натолкну на мысль: как считать коэффициенты к уравнению плоскости написано здесь - http://algolist.manual.ru/maths/geom/equation/plane.php. Алгоритм будет такой (возможно, он не идеален, но работать будет): 0. Удалить все дубли точек, если таковые есть. 1. Перебирать все тройки. 2. Выбрав очередную тройку, перебрать все точки (кроме точек этой тройки), подставляя их поочередно в полученное уравнение плоскости. 3. Если уравнение выполнилось, то, значит, точка принадлежит плоскости: взять текущую тройку + текущую точку, записать в результирующий массив четверок. 4. Удалить дубли четверок (или делать это выше в п. 3). 5. Отдать результат пользователю.
паскаль Всем здравствуйте! У меня такая проблема нужно ввести двумерный массив на паскале состоящий только из 0 1 2 потом упорядочить таким образом что бы сначала шли 0 потом 1 потом 2 ! т.е по возрастанию. никак не пойму как это сделать дополнительного массива создавать нельзя ! не могли бы вы объяснить как сделать не только пример программы но и на словах что бы я понял !
Можно использовать простейшее "сортировка пузырьком". Тут и массив один и в учебниках есть и в гугле. А делать лабу или домашку тут вряд ли кто будет...
Друзья, требуется сделать задачку на паскале. С меня печеньки, благодарности, символические денюжки. Пишите в аську 385774231, кто что хочет Пользователь вводит два вещественных числа: a и q, а также целое число n. Для вычисления характеристик геометрической прогрессии (a – первый член, q – знаменатель, n – номер искомого члена прогрессии) составить функцию, которая получает введенные числа в качестве параметров. Функция находит n-й член и сумму первых n членов прогрессии и возвращает их в качестве двух других параметров. Результат, который возвращает сама функция, должен позволять отслеживать следующие случаи (зависящие от значений введенных чисел): неположительный номер n, возрастающая или убывающая прогрессия, все члены прогрессии равны (вырожденный случай).
Могу скинуть на С++ одномерный массив упорядочивание от 0 до 2 ..можешь чуток доработать будет двумерный..
Ребята. Нужна помощь. Нужно передать файл, расположенный на рабочей станции, на которой выполняется сервер, на рабочую станцию, на которой выполняется клиент. С помощью механизма MailSlot. Буду очень благодарен!!!