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

Объясните прогу - C++

Восстановить пароль Регистрация
 
ioane
49 / 49 / 22
Регистрация: 19.02.2012
Сообщений: 225
01.06.2012, 00:37     Объясните прогу #1
Объясните действие проги, а то препод на паре дала ее и толком ничего не растолковала
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#include <fstream.h>
#include <iostream.h>
#include <stdio.h>
#include <windows.h>
 
struct FAIL                     
{
    char a[20] ;int k;
};
 
struct list                     
{
    FAIL fail;list *next;
};
 
typedef list list1;
list1 *first=NULL;int len=0;    
 
void begin(FAIL val)            
{
    list1 *prom=new list1;
    prom->fail=val;
    prom->next=first;
    first=prom;
    len++;
}
 
void sort()             
{       
    for(char a='a';a<='z';a++)
    {list1 *prom=first;
    if(!prom)
    {cout<<"list chistyi";
    return;}
    while(prom)
    {if(prom->fail.a[0]==a)
    cout<<prom->fail.a<<endl;
    prom=prom->next;}}
    cout<<endl;
}
 
void screen()                       
{
    list1 *prom=first;
    if(!prom)
    {cout<<"list chistyi";
    return;}
    cout<<"list:\n";
    while(prom)
    {cout<<prom->fail.a<<"  "<<prom->fail.k<<endl;
    prom=prom->next;}
    cout<<endl;
}
 
bool test(CHAR a[20])           
{
    list1 *prom=first;
    if(!prom)
        return 1;
    while(prom)
    {
        if(strcmp(a,prom->fail.a)==0)
        {prom->fail.k++;
        return 0;}
        prom=prom->next;
    }return 1;
}
 
void add()          
{
    char *p=new char[20];
    FILE *f1=NULL;
    do
    {
        cout<<"input filename";
        cin>>p;
        system("cls");
        f1=fopen(p,"r");
    }
    while(!f1);
    fstream f(p,ios::in);
    delete []p;
    char a[20]; FAIL b;b.k=1;
    while(!f.eof())
    {
        f>>a;
        strlwr(a);
        if(test(a))
        {
            strcpy(b.a,a);
            begin(b);
        }
    }
    f.close();fclose(f1);
}
 
void stop()                 
{
    system("pause");system("cls");
}   
 
void main()
{   
    add();
    screen();
    stop();
    sort();
    stop();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2012, 00:37     Объясните прогу
Посмотрите здесь:

C++ составить прогу
Исправьте прогу C++
Написать прогу C++
Cкомпилировать прогу C++
Подправить прогу( C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,399
01.06.2012, 02:47     Объясните прогу #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <fstream.h>
#include <iostream.h>
#include <stdio.h>
#include <windows.h>
 
void main()
{   
    add();
    screen();
    stop();
    sort();
    stop();
}

рукалицо.
Мой вам совет - читайте литературу. С теми знаниями, которые вы получите, устроиться на работу не сможете.

Сейчас прогу объясню.

Добавлено через 44 минуты
Цитата Сообщение от ioane Посмотреть сообщение
Объясните действие проги, а то препод на паре дала ее и толком ничего не растолковала
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
// объявление БОРЛАНДОВСКИХ заголовочных файлов
#include <fstream.h> // библиотека для работы с файлами, у нормальных людей #include <fstream> 
#include <iostream.h> // библиотека для ввода-вывода (I/O), у нормальных людей #include <iostream> 
#include <stdio.h> // библиотека для ввода-вывода (I/O) языка С, у нормальных людей её не будет, т.к. она включена в предыдущую
#include <windows.h> // хрен знает что здесь делает этот инклюд
 
struct FAIL // объявляем структуру FAIL                         
{
    char a[20] ;int k; // с двумя полями: символьный массив и число типа int
};
 
struct list  // объявляем структуру list                    
{
    FAIL fail;list *next;  // с двумя полями: структурной переменной FAIL и указателем на след. структуру типа list
};
 
typedef list list1; // даем новое имя структуре (синоним)
list1 *first=NULL;int len=0; // объявляем указатель на структуру list, глобальную переменную len = 0 (хотя все глобальные переменные итак равны 0 при объявлении) 
// P.S. использование глобальных переменных нежелательно, Это моветон. 
 
void begin(FAIL val) // объявляем функцию begin, принимающую в качестве параметра структурную переменную типа FAIL          
{
    list1 *prom=new list1; // объявляем указатель на новую структурную переменную типа list и выделяем под неё память
    prom->fail=val; // инициализируем поля новой структурной переменной. 
    prom->next=first; // поле следующий элемент теперь указывает на первую
    first=prom; // указатель на начало теперь указывает на нашу новую структурную переменную list
    len++; // увеличиваем счетчик на единицу
}
 
void sort() // объявляем  и описываем функцию сортировки                
{       
    for(char a='a';a<='z';a++) // от a до z
    {list1 *prom=first;  // объявляем указатель на структурную переменную типа list и инициализируем его на на начало
    if(!prom) // если он равен NULL
    {cout<<"list chistyi"; // выводим, что список пуст и выходим
    return;}
    while(prom) // пока указатель не равен NULL
    {if(prom->fail.a[0]==a) // если  первая буква поля fail структруной переменной list равно параметру цикла
    cout<<prom->fail.a<<endl; // выводим поле fail на экран
    prom=prom->next;}} // переходим далее по списку (prom теперь равен собственному полю next, где хранится указатель на след. структурную переменную
    cout<<endl;
}
 
void screen() // функция вывода на экран                        
{
    list1 *prom=first;  // объявляем указатель на структурную переменную типа list и инициализируем его на на начало
    if(!prom) // если указатель равен нулю, то выводим, что список пуст и выходим из функции
    {cout<<"list chistyi";
    return;}
    cout<<"list:\n";
    while(prom) // пока указатель не равен нулю
    {cout<<prom->fail.a<<"  "<<prom->fail.k<<endl; // выводим значения свойст структуры
    prom=prom->next;} // переходим дальше по списку
    cout<<endl;
}
 
bool test(CHAR a[20]) // функция поиска слова в списке. по хорошему писать надо char            
{
    list1 *prom=first; // список на начало
    if(!prom) // если список пуст
        return 1; // вернуть истину
    while(prom)
    {
        if(strcmp(a,prom->fail.a)==0) // если значение совпадает с полем структурной переменной
        {prom->fail.k++; // увеличиваем значение свойства k на единицу (инкримируем его)
        return 0;} // возвращаем ложь
        prom=prom->next; // перемещаемся дальше по списку
    }return 1; // вернуть истину (если прошлись по всему списку и не нашли слова)
}
 
void add() // функция добавления        
{
    char *p=new char[20]; // выделяем память 
    FILE *f1=NULL; // объявляем указатель для работы с файлом
    do
    {
        cout<<"input filename";
        cin>>p; // считываем имя файла
        system("cls"); // очищаем экран
        f1=fopen(p,"r"); // открываем файл с режимом только чтение
    }
    while(!f1); // делать пока указатель равен NULL
    fstream f(p,ios::in); // открываем поток записи в файл 
              // почему в одном случае используется С-шный стиль, в другом С++шный непонятно
    delete []p; // освобождаем память
    char a[20]; FAIL b;b.k=1;
    while(!f.eof()) // пока не конец файла
    {
        f>>a; // считываем значение с файла в переменную а
        strlwr(a);
        if(test(a)) // если значение не найдено
        {
            strcpy(b.a,a); // добавляем в список
            begin(b);
        }
    }
    f.close();fclose(f1); // закрываем файлы
}
 
void stop() // функция паузы                    
{
    system("pause");system("cls"); //пауза, очистка экрана
}   
 
void main() // ахтунг, ошибкен! По стандарту принято писать int main()
{   
    add();
    screen();
    stop();
    sort();
    stop();
}
Вот, написал как мог. В чем-то могу быть не совсем корректным, всё-таки час не ранний) Надеюсь поможет. В целом, программа должна работать со списком.
Что могу сказать еще: стиль, в котором написано - г**но. Мешается синтаксис языков С и С++. А компилятор, в котором это все оформлено вобще пора бы сжечь, а прах развеять по ветру.
-=ЮрА=-
Заблокирован
Автор FAQ
01.06.2012, 10:21     Объясните прогу #3
ioane, у тебя программа односвязного списка
Цитата Сообщение от ioane Посмотреть сообщение
struct list * * * * * * * * * *
{
* * FAIL fail;list *next;
};
Цитата Сообщение от ioane Посмотреть сообщение
void begin(FAIL val)
- это функция создания списка
Цитата Сообщение от ioane Посмотреть сообщение
void sort()
- это сортировка
Цитата Сообщение от ioane Посмотреть сообщение
void screen()
- это вывод на экран элементов списка
Цитата Сообщение от ioane Посмотреть сообщение
bool test(CHAR a[20])
- какая то функция по работе со списком (я особо не вникал в её назначение)
Цитата Сообщение от ioane Посмотреть сообщение
void add()
- как я понимаю это добавление вконец списка данными из файла

Цитата Сообщение от ioane Посмотреть сообщение
void stop()
- это функция так сказать паузы в приложении
Исходя из данного концепта я скажу что в коде мэйн отсутсвует функция первичного создания списка т.е. begin()

Цитата Сообщение от ioane Посмотреть сообщение
void main()
{ *
begin();
* * add();
* * screen();
* * stop();
* * sort();
* * stop();
}
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
01.06.2012, 10:27     Объясните прогу #4
Цитата Сообщение от ioane Посмотреть сообщение
struct list * * * * * * * * * *
{
* * FAIL fail;list *next;
};
структура списка. list *next указатель на list на следующий элемент списка, а там свой нэкст ещё на следующий и так далее, пока не встретится next==NULL.

Добавлено через 50 секунд
Цитата Сообщение от ioane Посмотреть сообщение
typedef list list1;
list1 есть синоним list.

Добавлено через 1 минуту
Цитата Сообщение от ioane Посмотреть сообщение
list1 *first=NULL;
Список из одного элемента (так как в первом же элементе next==NULL, то следующего после первого уже нет).

Добавлено через 2 минуты
Цитата Сообщение от ioane Посмотреть сообщение
list1 *prom=new list1;
* * prom->fail=val;
* * prom->next=first;
* * first=prom;
* * len++;
вставка элемента в начало списка.
-=ЮрА=-
Заблокирован
Автор FAQ
01.06.2012, 10:30     Объясните прогу #5
ioane, на счёт этого
Цитата Сообщение от MrGluck Посмотреть сообщение
void main() // ахтунг, ошибкен!
- если у тебя старый компилятор то всё отлично слинкуется и будет работать. Да по новому стандарту void main() запрещён, но в далёком прошлом Си программы использовали и работали с ним и всё было хорошо. Кстати синтаксис void main скажем во времена появления ХП, был допустим, отсюда делаем выводы (ХП достоял и до 2012 года хм, сомневаюсь что всё что было написано для данной ОС соответсвует нынешнему стандарту)
Вобщем ошибка совесм не в void main.

Добавлено через 1 минуту

Не по теме:

MrGluck, лично тебе - код представленный ТС, судя по заголовкам писан для старого компилятора, которому глубоко наплевать на новые стандарты и прочие не суть важные моменты.

taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
01.06.2012, 10:31     Объясните прогу #6
Это стандарт плюсов, не сей. На сях и сейчас void main() допускается, на плюсах он и под 95-й виндой был интовым. Дело здесь не в оси, а в языке, новый софт пишется по новому стандарту, (но если на простых сях, то их), даеж если под старую винду, а сама винда и следующая будет понимать проги на сях с void main и на асме.
-=ЮрА=-
Заблокирован
Автор FAQ
01.06.2012, 10:34     Объясните прогу #7
ioane, начал разбираться с твоим проектом, поправим...
-=ЮрА=-
Заблокирован
Автор FAQ
01.06.2012, 10:39     Объясните прогу #8
ioane, уже разобрался. Вобщем мэйн оставляем твой begin используется для других целей, с налёту не совесем вник в работу алгоритма. Роль этой функции добавление полей структуры FAIL в список.
Программа не работала потому как в каталоге проекта отсутсвовал файл с содержимым списка, т.е. функция
Цитата Сообщение от MrGluck Посмотреть сообщение
add();
не могла открыть его для чтения. По быстряку создал фал с двумя записями для полей FAIL. Вот его вид
a 20 b 30

Результат работы алгоритма ниже на скриншоте
Миниатюры
Объясните прогу  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2012, 10:44     Объясните прогу
Еще ссылки по теме:

C++ написать прогу
C++ Перероботать прогу

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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
01.06.2012, 10:44     Объясните прогу #9
ioane, вобщем оставляй свой код просто создай в каталоге проекта текстовик следующей структуры строка
целоеЧисло строка ЦелоеЧисло...
И вводи это имя после надписи программы input filename
В аттаче файл со списком из 2-х элементов, скрин ввода имени файла и сам проект откомпилированный в VisualStudio 6.0
Миниатюры
Объясните прогу  
Вложения
Тип файла: txt list.txt (9 байт, 4 просмотров)
Тип файла: rar lst_project.rar (8.4 Кб, 3 просмотров)
Yandex
Объявления
01.06.2012, 10:44     Объясните прогу
Ответ Создать тему
Опции темы

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