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

проверте програму - C++

Восстановить пароль Регистрация
 
kaffein
 Аватар для kaffein
5 / 5 / 1
Регистрация: 14.11.2010
Сообщений: 121
22.02.2011, 22: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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#include "stdafx.h"
#include <time.h> 
#include "stdio.h"
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
 
        typedef struct maneg
        {
            char name [20];
            char secondname[20];
            maneg* next;
            maneg* prev;
        }list;
list *clear( list*h )
{
if(!h) return NULL;
list*n;
for(n=h->next;n;n=n->next )
{
if(h) free(h);
h=n;
}
if(h) free (h);
return 0;
}
 
list* dod(list* first)
        {
            list* nov;
            nov = (list*) malloc(sizeof(list));
            if(!nov)
                printf("can not allocate memory");
                return nov;
            printf("vvedid dannue");
            scanf("%s,%s",&(nov->name),&(nov->secondname));
            nov->next=first;
            first=nov;
            return first;
        }
list* poc(list* p)
        {
            list*n=p;
            int i,sum=0;
        printf("nom pos");
            scanf("%i",&i);
            for(n;n->next;n=n->next)
                sum++;
            if(sum==i)
                return p;
        }
list* per(list*p)
{   list*n=p;
    if(p->next)p->next=p->prev;
    n->prev=n->next;
    return p;
}
list* dob(list*vuzel)
{
    list* n;
    n=(list*) malloc(sizeof(list));
 
if(!vuzel) return n;
if(vuzel->next) n->next=vuzel->next;
vuzel->next=n;
return n;
}
void print(list* first)
{
    list*wwe;
    wwe=first;
    while(wwe)
    {
        printf("%s,%s\n",&(wwe->name),&(wwe->secondname));
        wwe=wwe->next;
    
    }
 
 
}
void fill_list(list*p)
{
    for( ;p;p=p->next)
    {
        printf(" enter name of student\n");
            scanf("%s",&(p->name));
 
        printf("enter secondname of student\n");
            scanf("%s",&(p->secondname));
        
    }
}
list *Add(list *p)
{
list *n = new list;
memset( n, 0, sizeof(list) );
if(!p) return n;
 
n->next = p->next;
p->next = n;
n->prev = p;
return n;
}
 
    
int main ()
 
{    
    int q;      
printf("vvedit kilkist\n");
    scanf("%d",&q);
list *head = Add( NULL );
    for(list*p=head;q>1;q--)
    fill_list(head);
    list fx;
    list* r=dod(&fx);
    list* o=poc(&fx);
    list* s=per(&fx);
    list* z=dob(&fx);
    list* p=clear(&fx);
    print(head);
        
        int n, i, k,sum=0;
        printf("vvedit rozmir masuva\n");
        scanf("%d",&n);
        int *a=new int [n];
                srand(time(NULL));
        for (i=0; i<n; i++)
               a[i]=rand()%20; //заполнение массива случайными числами от 0 до 19
      
        for (k=0; k<n; k++)
                sum+=a[k];
                printf("sum=%i",sum);   
        delete [] a;
        return sum;
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.02.2011, 22:37     проверте програму
Посмотрите здесь:

C++ проверте эту програму
ПРОВЕРТЕ НА ОШИБКИ ПЛЗ! C++
C++ Проверте матрицу
C++ отладить програму
проверте где ошибка в mergeSort C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Lord_Voodoo
Супер-модератор
 Аватар для Lord_Voodoo
8501 / 2168 / 61
Регистрация: 07.03.2007
Сообщений: 10,836
Завершенные тесты: 1
22.02.2011, 23:30     проверте програму #2
kaffein, а потрассировать программу слабо?
kaffein
 Аватар для kaffein
5 / 5 / 1
Регистрация: 14.11.2010
Сообщений: 121
22.02.2011, 23:36  [ТС]     проверте програму #3
извините за ламерский вопрос, но что ето значит?
silent_1991
22.02.2011, 23:37
  #4

Не по теме:

kaffein, извините за резкий ответ, но вы что, в гугле забанены?

kaffein
 Аватар для kaffein
5 / 5 / 1
Регистрация: 14.11.2010
Сообщений: 121
22.02.2011, 23:48  [ТС]     проверте програму #5
причём здесь гугл. у меня програма коректно не работает и я не могу найти ошибку. мне что нужно код в поисковике прописать???
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
22.02.2011, 23:49     проверте програму #6
kaffein, трассировка.
kaffein
 Аватар для kaffein
5 / 5 / 1
Регистрация: 14.11.2010
Сообщений: 121
22.02.2011, 23:54  [ТС]     проверте програму #7
по теме кто-то может ответить????
ping_rulezzz
26 / 26 / 4
Регистрация: 18.02.2011
Сообщений: 51
23.02.2011, 00:01     проверте програму #8
Поставьте брейк поинт в начале проги, тыкаем f5, затем f10/f11. и смотрим пошагово как выполняется программа. Сей процесс - пошаговый прогон - называется трассировка.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
23.02.2011, 00:04     проверте програму #9
ping_rulezzz, зачем такие сложности, можно сразу f10/f11 - начнётся трассировка)))
ping_rulezzz
26 / 26 / 4
Регистрация: 18.02.2011
Сообщений: 51
23.02.2011, 00:06     проверте програму #10
ну да) ... привычка видать)
kaffein
 Аватар для kaffein
5 / 5 / 1
Регистрация: 14.11.2010
Сообщений: 121
23.02.2011, 00:11  [ТС]     проверте програму #11
а..... ясно! ето я знаю! и етим пользовался, но, в принципе, так и не понял в чём проблема
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
23.02.2011, 00:14     проверте програму #12
Вы хоть скажите, что вас не устраивает, где происходит ошибка?
kaffein
 Аватар для kaffein
5 / 5 / 1
Регистрация: 14.11.2010
Сообщений: 121
23.02.2011, 00:26  [ТС]     проверте програму #13
когда я запускаю програму, заполнил список, вишло на исполнение функции dod вискакивает какое-то окно. беру ету функцию в /*......*/ и питаюсь проверить следующую функцию но и там что-то выскакивает.
возьмите попробуйте откомпелировать.
kaffein
 Аватар для kaffein
5 / 5 / 1
Регистрация: 14.11.2010
Сообщений: 121
27.02.2011, 23:04  [ТС]     проверте програму #14
вот поработал над прогой но все одно не работает посмотрите в чём проблема, а то я всю голову уже сломал
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#include "stdafx.h"
#include <time.h> 
#include "stdio.h"
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
 
        struct list
        {
            char name [20];
            char secondname[20];
            list* next;
            list* prev;
        };
list *clear( list*h )
{
    if(!h) return NULL;
    list*n;
    for(n=h->next;n;n=n->next )
    {
        if(h) free(h);
            h=n;
    }
    if(h) free (h);
    return 0;
}
 
list* dod(list* first)
        {
            list* nov;
            nov = (list*) malloc(sizeof(list));
            if(!nov){
                printf("can not allocate memory");
                return NULL;
            }
            printf("vvedid dannue");
            scanf("%s,%s",&(nov->name),&(nov->secondname));
            nov->next=first;
            first=nov;
            return first;
        }
list* poc( list* head, int num )
        {
            if (!head)
                return NULL;
            list*n = head;
            for( int i=1; (i<num) && (n->next); i++, n=n->next);
            return n;
        }
list* per(list*p)
{   list*n=p;
    if(p->next)p->next=p->prev;
    n->prev=n->next;
    return p;
}
list* dob(list*vuz_el)
{
    list* n;
    n=(list*) malloc(sizeof(list));
 
if(!vuz_el) return n;
 
if(vuz_el->next) 
    n->next=vuz_el->next;
vuz_el->next=n;
return n;
}
void print(list* first)
{
    list*wwe;
    wwe=first;
    while(wwe)
    {
        printf("%s,%s\n",wwe->name,wwe->secondname);
        wwe=wwe->next;
    
    }
 
 
}
void fill_list(list*p)
{
    for( ;p;p=p->next)
    {
        printf(" enter name of student\n");
            scanf("%s",&(p->name));
 
        printf("enter secondname of student\n");
            scanf("%s",&(p->secondname));
        
    }
}
list *AddL(list *p)
{
list *n = new list;
memset( n, 0, sizeof(list) );
if(!p) return n;
 
n->next = p->next;
n->prev = p;
p->next = n;
 
return n;
}
 
    
int main ()
 
 
{    
    int q;      
    printf("vvedit kilkist student\n");
    scanf("%d",&q);
 
    list *head, *tail;
    head = AddL(NULL);
    tail = AddL(AddL( head ));
 
    for(list*p=head;q>1;q--)
        p=AddL(p);
 
 
 
    for(list*p = head; p; p = p->next)
        fill_list(p);
    
    list fx;
    list* o=poc( head, 2 );
    list* z=dob(&fx);
    list* r=dod(&fx);
    list* s=per(&fx);
 
 
    list* p=clear(&fx);
    print(head);
        
        int n, i, k,sum=0;
        printf("vvedit rozmir masuva\n");
        scanf("%d",&n);
        int *a=new int [n];
                srand(time(NULL));
        for (i=0; i<n; i++)
               a[i]=rand()%20; //заполнение массива случайными числами от 0 до 19
      
        for (k=0; k<n; k++)
                sum+=a[k];
                printf("sum=%i",sum);   
        delete [] a;
        return sum;
ping_rulezzz
26 / 26 / 4
Регистрация: 18.02.2011
Сообщений: 51
28.02.2011, 00:37     проверте програму #15
зачем этот цикл?
for(list*p = head; p; p = p->next)
если вы его же делает в самой функции fill_list

функция dob работает неправильно ( как мне кажется), тоже самое и с функцией dod (в ней никак не обрабатывается list->prev
на счёт функции per не могу сказать. т.к. пока не понял что именно вы хотели сделай этой функцией.

по поводу того, что у вас вылетает ошибка (все предыдущие функции проходят, но всё же мне кажется делают они не то, что нужно) - это происходит потому, что вы пытаетесь очистить неправильно сформированный список. поставьте брейкпоинт в функции clear и протрассируйте. сама функция clear работает правильно - можете убедиться, передав в неё свой первоначальный список head;

Добавлено через 1 минуту
только print(head) после этого не делайте
kaffein
 Аватар для kaffein
5 / 5 / 1
Регистрация: 14.11.2010
Сообщений: 121
28.02.2011, 15:25  [ТС]     проверте програму #16
per должно возвращать указатель на и-тий елемент списка

Добавлено через 1 час 22 минуты
ой, сорри, не посмотрел эта функция переставляет местами елементи списка

Добавлено через 14 минут
у меня проблема с самим формированием списка я не очень понял етот процес обясните пож на примере
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
28.02.2011, 17:09     проверте програму #17
А что конкретно не понятно? Мы при каждом добавлении элемента выделяем память под соответствующий элемент и просто выставляем указатели - связи между элементами. Советую нарисовать это процесс на бумажке - тогда станет понятно, какой код и в какой последовательности надо написать, чтобы всё было труъ.
kaffein
 Аватар для kaffein
5 / 5 / 1
Регистрация: 14.11.2010
Сообщений: 121
28.02.2011, 17:26  [ТС]     проверте програму #18
вот етот участок не очень понятен(к томуже он наверное и не правельно сделан)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  
        int q;          
        printf("vvedit kilkist student\n");
        scanf("%d",&q);
 
        list *head, *tail;
        head = AddL(NULL);
        tail = AddL(AddL( head ));
 
        for(list*p=head;q>1;q--)
                p=AddL(p);
 
 
 
        for(list*p = head; p; p = p->next)
                fill_list(p);
        
        list fx;
препод говорил, что нужно использовать такое объявление AddL(AddL( head )) но зачем оно и ето p=AddL(p); жуть!
мне здесь просто нужно заполнить список из некого количества студентов взятое у пользователя
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.02.2011, 17:35     проверте програму
Еще ссылки по теме:

Создал прогу в С++, я нуб, проверте меня, и поставте оценку C++
C++ Проверте, пожалуйста, правильность программного кода
Картинка в програму C++

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

Или воспользуйтесь поиском по форуму:
ping_rulezzz
26 / 26 / 4
Регистрация: 18.02.2011
Сообщений: 51
28.02.2011, 17:35     проверте програму #19
попробуйте абстрагироваться от препода и написать свой код, используя функции, которые у вас есть. ну или на крайняк - закомменте tail = AddL(AddL( head )); и посмотрите на что это повлияет.
Yandex
Объявления
28.02.2011, 17:35     проверте програму
Ответ Создать тему
Опции темы

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