Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
5 / 5 / 1
Регистрация: 14.11.2010
Сообщений: 121
1

проверте програму

22.02.2011, 22:37. Просмотров 808. Ответов 18
Метки нет (Все метки)

Всем доброго времени суток!
вот создал програму про списки, ошибки при компиляции не выскакивают, но когда я иду на выполнение, в функциях происходят какие-то мистические вещи
посмотрите пожалуйста и напишите как надо
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;
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.02.2011, 22:37
Ответы с готовыми решениями:

проверте эту програму
#include void multipy( int a,int b,int c); main(void) { int a= { 0,1,2,3,4, 1,2,3,4,5,...

Проверте матрицу
Помогите подправить программу,чтобы выводило матрицу,согласно задаче. Задача:Задана матрица...

ПРОВЕРТЕ НА ОШИБКИ ПЛЗ!
была такая задача: Составить программу, которая для заданного начального каталогов файловой системы...

проверте где ошибка в mergeSort
main.cpp #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;vector&gt; #include &lt;iomanip&gt; #include...

18
Супер-модератор
8736 / 2444 / 139
Регистрация: 07.03.2007
Сообщений: 11,677
22.02.2011, 23:30 2
kaffein, а потрассировать программу слабо?
0
5 / 5 / 1
Регистрация: 14.11.2010
Сообщений: 121
22.02.2011, 23:36  [ТС] 3
извините за ламерский вопрос, но что ето значит?
0
silent_1991
22.02.2011, 23:37
  #4

Не по теме:

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

0
5 / 5 / 1
Регистрация: 14.11.2010
Сообщений: 121
22.02.2011, 23:48  [ТС] 5
причём здесь гугл. у меня програма коректно не работает и я не могу найти ошибку. мне что нужно код в поисковике прописать???
0
Эксперт С++
5039 / 3100 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
22.02.2011, 23:49 6
kaffein, трассировка.
0
5 / 5 / 1
Регистрация: 14.11.2010
Сообщений: 121
22.02.2011, 23:54  [ТС] 7
по теме кто-то может ответить????
0
26 / 26 / 12
Регистрация: 18.02.2011
Сообщений: 51
23.02.2011, 00:01 8
Поставьте брейк поинт в начале проги, тыкаем f5, затем f10/f11. и смотрим пошагово как выполняется программа. Сей процесс - пошаговый прогон - называется трассировка.
0
Эксперт С++
5039 / 3100 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
23.02.2011, 00:04 9
ping_rulezzz, зачем такие сложности, можно сразу f10/f11 - начнётся трассировка)))
1
26 / 26 / 12
Регистрация: 18.02.2011
Сообщений: 51
23.02.2011, 00:06 10
ну да) ... привычка видать)
0
5 / 5 / 1
Регистрация: 14.11.2010
Сообщений: 121
23.02.2011, 00:11  [ТС] 11
а..... ясно! ето я знаю! и етим пользовался, но, в принципе, так и не понял в чём проблема
0
Эксперт С++
5039 / 3100 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
23.02.2011, 00:14 12
Вы хоть скажите, что вас не устраивает, где происходит ошибка?
0
5 / 5 / 1
Регистрация: 14.11.2010
Сообщений: 121
23.02.2011, 00:26  [ТС] 13
когда я запускаю програму, заполнил список, вишло на исполнение функции dod вискакивает какое-то окно. беру ету функцию в /*......*/ и питаюсь проверить следующую функцию но и там что-то выскакивает.
возьмите попробуйте откомпелировать.
0
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;
0
26 / 26 / 12
Регистрация: 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) после этого не делайте
1
5 / 5 / 1
Регистрация: 14.11.2010
Сообщений: 121
28.02.2011, 15:25  [ТС] 16
per должно возвращать указатель на и-тий елемент списка

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

Добавлено через 14 минут
у меня проблема с самим формированием списка я не очень понял етот процес обясните пож на примере
0
Эксперт С++
5039 / 3100 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
28.02.2011, 17:09 17
А что конкретно не понятно? Мы при каждом добавлении элемента выделяем память под соответствующий элемент и просто выставляем указатели - связи между элементами. Советую нарисовать это процесс на бумажке - тогда станет понятно, какой код и в какой последовательности надо написать, чтобы всё было труъ.
1
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); жуть!
мне здесь просто нужно заполнить список из некого количества студентов взятое у пользователя
0
26 / 26 / 12
Регистрация: 18.02.2011
Сообщений: 51
28.02.2011, 17:35 19
попробуйте абстрагироваться от препода и написать свой код, используя функции, которые у вас есть. ну или на крайняк - закомменте tail = AddL(AddL( head )); и посмотрите на что это повлияет.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.02.2011, 17:35

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Проверте, пожалуйста, правильность программного кода
#include &quot;stdafx.h&quot; #include &quot;string.h&quot; #include &quot;iostream&quot; using namespace std; int main() {...

Создал прогу в С++, я нуб, проверте меня, и поставте оценку
Дан целочисленный массив A(n) с элементами, сгенерированными случайными числами в диапазоне (-20,...

Написать програму...
1) Дано чотири цілих числа, одне з яких відмінне від трьох інших, рівних між собою. Вивести квадрат...

Картинка в програму
HELP!!! Нужно вставить картинку в програму напишите пожалуйста полний код как ето сделать зарание...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

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