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

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

Восстановить пароль Регистрация
 
SHMELE
1 / 1 / 0
Регистрация: 22.12.2010
Сообщений: 4
24.12.2010, 15:48     Описать алгоритм - ступенчатая аннотация #1
Программа должна делать ступенчатую аннотацую, хотел делать считывание посимвольное но там тогда очень громоздко и неудобно пришлось бы отслеживать слова . например 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?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2010, 15:48     Описать алгоритм - ступенчатая аннотация
Посмотрите здесь:

Составить судоку. Разгадать ее и описать алгоритм. C++
Описать программу C++
Не могу описать словестно алгоритм работы функции C++
C++ описать функции
Описать функцию Even C++
C++ Может кто словами описать алгоритм многопутевого слияния?
C++ Описать алгоритм как работает код программы
Нужен алгоритм поиска пути в этом лабиринте (будь то волновой алгоритм или алгоритм правой/левой руки ) C++

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

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

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 на этой срочке но на следющей не могу...
а отследи на следующей не могу табулироать предыдущую...
как-то так
Yandex
Объявления
24.12.2010, 16:02     Описать алгоритм - ступенчатая аннотация
Ответ Создать тему
Опции темы

Текущее время: 16:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru