Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
mr.man
0 / 0 / 0
Регистрация: 15.05.2009
Сообщений: 14
#1

Ряды (задача) - C++

22.05.2009, 01:34. Просмотров 551. Ответов 6
Метки нет (Все метки)

Задан текст, в котором присутствующие скобки. Проанализировать его с целью выявления и локализации ошибок в использовании скобок. Возможны три типа ошибок :
а) несоответствие скобок по количествам;
б) закрывающая скобка расположена к открывающей;
в) отсутствующий текст между скобками.
Результатом работы программы должно быть сообщение о типах допущенных ошибок и их место в тексте (номер строки).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2009, 01:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ряды (задача) (C++):

ряды в С++ - C++
помогите вот прога а при нажатии ctrl+F9 и вводе любой цифры выдается мусор вот прога: #include<iostream.h> #include<math.h> ...

Ряды - C++
Помогите плиз с прогой,если не трудно её полный текст ∑(от n=1 до бесконечности) n/(3n-1)

ряды - C++
помогите плиз, как создать ряд из чисел кратных 7 ?

ряды - C++
помогите плиз. нужно создать ряд s=1+1/4+1/9+1/25... по какой формуле это можно сделать?

Ряды - C++
Помогите пожалуйста написать программу. Напишите программу, которая выводит на экран сообщение в "телеграфном" стиле: буквы сообщения...

Ряды - C++
Помогите с рядами , новичок в с++.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
mikutu
26 / 26 / 2
Регистрация: 29.04.2009
Сообщений: 90
22.05.2009, 05:42 #2
заводим счетчики для открывающихся и закрывающихся скобок (пусть i и j)
a) если после анализа i<>j значит ошибка
б) если после увеличения j, j>i, то ошибка
в) дополнительно запоминаем позицию последней открытой и закрытой скобок если j-i==1, то ошибка
А вообще советую вам развивать логическое мышление и навыки программирования, все ваши вопросы довольно просты и решить их вам самому думаю будет вполне по силам.
Ultrator
11 / 7 / 1
Регистрация: 28.04.2009
Сообщений: 219
22.05.2009, 15:08 #3
б) - это как, нарисуй пример?
в) - просто за каждой скобкой "(" смотреть следующий символ, если он ")" - выход.
Для этого:
Если (текущий символ == "(") {в переменную-флаг при пишется 1};
Иначе {если (флаг == 1){если(текущий символ == ")" ) то выход; иначе флаг=0; }}
mr.man
0 / 0 / 0
Регистрация: 15.05.2009
Сообщений: 14
23.05.2009, 00:02  [ТС] #4
спасибо, но у меня возникают проблемы в самой реализации программы на "си"...я прошу написать приблизительный пример программы...
б) пример : ")"_____"("
mikutu
26 / 26 / 2
Регистрация: 29.04.2009
Сообщений: 90
23.05.2009, 16:58 #5
подробнее опишите проблему с пунктом б), а то не понятно.
ведь корректно такое выражение (14+3)*(5+6), а вот такое не корректно 14+3)*(5+6)
для того что я считаю не корректным решение я написал в своем первом ответе.
вообще здесь легче всего решить с помощью рекурсии само объявление функции примерно такое
void nah_err(int i, int j, int len, int poz, int numstr, char stroka[100])
где i -количество открывающихся скобок
j -количество закрывающихся скобок
len - длина строки
poz - позиция при анализе в строке
numstr - номер строки
stroka - сама строка для анализа
Может попозже напишу примерную программу для нахождения ошибок.
Rumata
4 / 4 / 0
Регистрация: 10.04.2009
Сообщений: 23
23.05.2009, 18:46 #6
Цитата Сообщение от mr.man Посмотреть сообщение
Задан текст, в котором присутствующие скобки. Проанализировать его с целью выявления и локализации ошибок в использовании скобок. Возможны три типа ошибок :
а) несоответствие скобок по количествам;
б) закрывающая скобка расположена к открывающей;
в) отсутствующий текст между скобками.
Результатом работы программы должно быть сообщение о типах допущенных ошибок и их место в тексте (номер строки).
Думаю принцип такой (для char):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
int n = strlen(str);            //длина строки
//При ошибке из пункта 1 какую позицию считать неверной?
//a и b - для проверки пункта 1
//с - для проверки пункта 2
//d - для проверки пункта 3
//не работает, если текст со вложенными скобками: аб (вг (дежзи) клмно)
int a=0, b=0, c=0, d=0, i=0;
for(i; i<n; i++)
{
    if( str[i] == '(' )
    {
        a++;
        if(c == 0)
            c=1;
        else
            cout << "Error 2! Position " << i+1 << endl;
        d=i;
    }
    if( str[i] == ')' )
    {
        b++;
        if(c == 1)
            c=0;
        else
            cout << "Error 2! Position " << i+1 << endl;
        if(i == d+1)
            cout << "Error 3! Position " << i << '-' << i+1 << endl;
    }
}
if(a != b) cout << "Error 1!" << endl;
Для string еще проще.
mikutu
26 / 26 / 2
Регистрация: 29.04.2009
Сообщений: 90
25.05.2009, 20:21 #7
в программе приведенной выше недоработка о которой вас предупредил ее автор т.к. она выдаст ошибку на вот этом месте аб (вг ( а там ее нет. Вообще в ней просто реализован не правильный алгоритм нахождение ошибки 2. А на приведенном примере аб (вг (дежзи) клмно) он выдаст 2 ошибке 2 типа.
Алгоритм для ошибки 3 тоже не верен т.к. не найдет ошибки в таком примере )14+3, а она там есть. Я возьму за основу предыдущую программу и постараюсь исправить ошибки в ней допущенные, результат смотрите ниже (а обозначения в моем 1 ответе)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int n = strlen(str);                    //длина строки
int pi=0, pj=0, , j=0, i=0;
for(int ii=0; ii<n; ii++)
{
        if( str[ii] == '(' )
        {
                i++;
                pi=ii;
        }
        if( str[ii] == ')' )
        {
                j++;
                pj=ii;
                if(j > i)
                        cout << "Error 2! Position " << ii+1 << endl;
                if(pj - pi == 1)
                        cout << "Error 3! Position " << ii << '-' << ii+1 << endl;
        }
}
if(a != b) cout << "Error 1!" << endl;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.05.2009, 20:21
Привет! Вот еще темы с ответами:

ряды - C++
дано натуральное число n. Вычислить P=(1-1/2)*(1-1/4)*(1-1/6)...(1-1/2*n)

Ряды в С++ - C++
Найти сумму ряда с точностью E=10^-4, общий член которого An=(n!)/3(n^n) Знайти суму ряду з точністю E=10^-4, загальний член якого ...

Ряды - C++
Для заданного ряда необходимо: 1) Найти сумму S1 для n первых элементов ряда (с использованием оператора FOR); 2) Найти сумму S2...

Ряды Тейлора - C++
Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора, на интервале от xнач. до xкон. с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
25.05.2009, 20:21
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru