Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
2 / 2 / 1
Регистрация: 22.12.2010
Сообщений: 4

Описать алгоритм - ступенчатая аннотация

24.12.2010, 15:48. Показов 1179. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Программа должна делать ступенчатую аннотацую, хотел делать считывание посимвольное но там тогда очень громоздко и неудобно пришлось бы отслеживать слова . например case ,
пришлось читать построчно и грузить строку в массив
пока что проблема в том что нельзя контролировать отступ читаемой в данный момент строки.
т.е.

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
char Buf[10000], NameIn[50], NameOut[50];
char openedBracket = '{';
char closedBracket = '}';
char nextString = '\n';
int N=0,n=0, j, i, check=0, check2=0, tabs;
FILE *in, *out;
 
printf("Enter Input File Name:\n"); 
scanf("%s",NameIn);
printf("Enter Output File Name:\n"); 
scanf("%s",NameOut);
 
in=fopen(NameIn,"r");
out=fopen(NameOut,"w");
 
if ( in!=NULL ) 
{ 
 
    while((fgets(Buf, 10000, in))!=NULL)
    {
        for (int i=0; i<10000; i++)
        {
    //----------------------------------------------------------------------------------------------------------------------------------
            if (Buf[i] == openedBracket)
            {
                N++;
            }
            if (Buf[i] == closedBracket)
            {
                N--;
                n=1;
            }
 
    //----------------------------------------------------------------------------------------------------------------------------------
        }
        fprintf(out,"%s",Buf);      //вот тут выводитмся строка, но она в конце уже имеет символ 
        for (tabs=0;tabs<N-n;tabs++)  //перехода на новую , т .е.  я могу отследить скобку 
                    {                     //в этой строке и сделать отступ в следующей,
                        fprintf (out,"\t"); //но, если в этой строке у нас 
                    }//закрывающая скобка то мне нужно и её тоже сместить 
                                                           //влево на 1 табуляцию
        n=0;
    }
}
else 
{
    cout << "Can't find file!\n";
    system("Pause");
    return 0;
}
 
fclose (in);
fclose (out);
}
вот результат работы программы
БЫЛО

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <stdio.h> 
#include <stdlib.h> 
#include <cstring.h> 
//---------------------------------------------------------------------------  
struct students 
{ 
char FIO [50]; 
char VUZ [50]; 
double kol_bal; 
int god; 
unsigned int vozrast; 
}; 
  
int main(int argc, char* argv[]) 
{ 
students ST_MY[10];       
char S1[256],NM[50];    
FILE *f; 
int K,nn,i;                     
nn=0; 
printf("Enter File Name:\n"); 
scanf("%s",NM); 
f=fopen(NM,"r"); 
if ( f!=NULL ) { 
while ( !feof(f)) 
{ 
K=1; 
fgets(S1,50,f); 
for (char *t=strtok(S1," ") ; t ;t=strtok(0," ")) 
{ 
switch (K) {                                       
case 1: 
strcpy(ST_MY[nn].FIO,t); K++;  break; 
case 2: 
strcpy(ST_MY[nn].VUZ,t);  K++; break; 
case 3: 
ST_MY[nn].kol_bal=static_cast<double>(*t); K++;  break; 
case 4: 
ST_MY[nn].god=static_cast<int>(*t);  K++; break; 
case 5: 
ST_MY[nn].vozrast=static_cast<unsigned int>(*t); K++;  break; 
default: 
printf("Error\n"); 
; 
} 
} 
nn++;          
} 
fclose(f); 
} 
else 
{ 
printf("error\n"); 
} 
f=fopen("out.txt","w");    
for (i = 0; i <= 10; i++) { 
fprintf(f,"%s\n",ST_MY.FIO); 
fprintf(f,"%s\n",ST_MY.VUZ); 
fprintf(f,"%lf\n",ST_MY.kol_bal); 
fprintf(f,"%d\n",ST_MY.god); 
fprintf(f,"%d\n",ST_MY.vozrast); 
} 
fclose(f); 
system("Pause"); 
return 0; 
}
-------------------------------------------------------------------------------------------------
СТАЛО

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <stdio.h> 
#include <stdlib.h> 
#include <cstring.h> 
//---------------------------------------------------------------------------  
struct students 
{ 
    char FIO [50]; 
    char VUZ [50]; 
    double kol_bal; 
    int god; 
    unsigned int vozrast; 
    }; 
  
int main(int argc, char* argv[]) 
{ 
    students ST_MY[10];       
    char S1[256],NM[50];    
    FILE *f; 
    int K,nn,i;                     
    nn=0; 
    printf("Enter File Name:\n"); 
    scanf("%s",NM); 
    f=fopen(NM,"r"); 
    if ( f!=NULL ) { 
        while ( !feof(f)) 
        { 
            K=1; 
            fgets(S1,50,f); 
            for (char *t=strtok(S1," ") ; t ;t=strtok(0," ")) 
            { 
                switch (K) {                                       
                    case 1: 
                        strcpy(ST_MY[nn].FIO,t); K++;  break; 
                        case 2: 
                        strcpy(ST_MY[nn].VUZ,t);  K++; break; 
                        case 3: 
                        ST_MY[nn].kol_bal=static_cast<double>(*t); K++;  break; 
                        case 4: 
                        ST_MY[nn].god=static_cast<int>(*t);  K++; break; 
                        case 5: 
                        ST_MY[nn].vozrast=static_cast<unsigned int>(*t); K++;  break; 
                        default: 
                        printf("Error\n"); 
                        ; 
                        } 
                } 
            nn++;          
                } 
        fclose(f); 
            } 
    else 
        { 
            printf("error\n"); 
            } 
    f=fopen("out.txt","w");    
        for (i = 0; i <= 10; i++) { 
            fprintf(f,"%s\n",ST_MY.FIO); 
            fprintf(f,"%s\n",ST_MY.VUZ); 
            fprintf(f,"%lf\n",ST_MY.kol_bal); 
            fprintf(f,"%d\n",ST_MY.god); 
            fprintf(f,"%d\n",ST_MY.vozrast); 
            } 
    fclose(f); 
        system("Pause"); 
        return 0; 
        }
Все строки с закрывающимися скобками нужно сместить влево на 1 таб
помогите кто чем может
не хотелось бы усложнять все это и уходить от fgets
буду очень благодарен

Добавлено через 9 минут
Вопрос снят, другой вопрос, как отследить и сдвинуть на 1 таб вправо код между двумя case?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.12.2010, 15:48
Ответы с готовыми решениями:

Составить судоку. Разгадать ее и описать алгоритм.
Составить судоку.разгадать ее и описать агларитм.:help:

Не могу описать словестно алгоритм работы функции
Это аналог пхпшной функции explode()... в голову всякая фигня логически не связная лезет)) vector&lt;string&gt; explode( const string...

Описать алгоритм как работает код программы
Здравствуйте. Помогите пожалуйста разобраться в коде, какой тут алгоритм, какая строчка что делает. #include &lt;pthread.h&gt; #include...

2
21 / 21 / 5
Регистрация: 14.06.2010
Сообщений: 108
24.12.2010, 15:52
по-моему не усложняя не получится, т.к. если ты в строке нашел открытую скобку, нужно сначала !не печатая дальше ничего! найти закрытую скобку, а потом перед началом вывода на экран строки, нужно поставить опр. кол-во отступов... как-то так я себе этот алгоритм представляю
0
2 / 2 / 1
Регистрация: 22.12.2010
Сообщений: 4
24.12.2010, 16:02  [ТС]
собстенно хватило просто постаить флаг что это открыающаяскобка и её смещать не надо

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if (Buf[i] == openedBracket)
            {
                N++;
                n=1;
            }
            if (Buf[i] == closedBracket)
            {
                N--;
            
            }           
    //----------------------------------------------------------------------------------------------------------------------------------
        }
        for (tabs=0;tabs<N-n;tabs++)
                    {
                        fprintf (out,"\t");
                    }
        fprintf(out,"%s",Buf);
        n=0;
А вот что делать с case?

Добавлено через 3 минуты
с помощью fgets я могу0 отследить case на этой срочке но на следющей не могу...
а отследи на следующей не могу табулироать предыдущую...
как-то так
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.12.2010, 16:02
Помогаю со студенческими работами здесь

Может кто словами описать алгоритм многопутевого слияния?
Может кто словами описать алгоритм многопутевого слияния? В виде: 1-й шаг: делаем то 2-й шаг: делаем это и т. д. В гугле...

Ступенчатая матрица
Подскажите как можно привести матрицу к ступенчатому виду(верхней треугольная матрица).

Ступенчатая функция
Помогите построить ступенчатую функцию последней строки матрицы

Ступенчатая функция, оператор if
Здравствуйте!Снова прощу помощи) Мне надо понимать это,в интернете не нашел толком ничего,условие для полноты прилагаю в файле

6 ступенчатая МКПП Windows
Здравствуйте, уважаемые пользователи и модераторы! Написал небольшую прогу(скорее всего говнокод т.к. начинающий) без ООП. Просьба оценить...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru