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

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

22.02.2011, 22:37. Показов 1284. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
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, 4,5,6,7,8, 1,2,3,4,5,}, b={1,2,3,4, ...

Проверте матрицу
Помогите подправить программу,чтобы выводило матрицу,согласно задаче. Задача:Задана матрица D(4,4).Определить максимальный среди...

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

18
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
22.02.2011, 23:30
kaffein, а потрассировать программу слабо?
0
 Аватар для kaffein
5 / 5 / 1
Регистрация: 14.11.2010
Сообщений: 121
22.02.2011, 23:36  [ТС]
извините за ламерский вопрос, но что ето значит?
0
22.02.2011, 23:37

Не по теме:

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

0
 Аватар для kaffein
5 / 5 / 1
Регистрация: 14.11.2010
Сообщений: 121
22.02.2011, 23:48  [ТС]
причём здесь гугл. у меня програма коректно не работает и я не могу найти ошибку. мне что нужно код в поисковике прописать???
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
22.02.2011, 23:49
kaffein, трассировка.
0
 Аватар для kaffein
5 / 5 / 1
Регистрация: 14.11.2010
Сообщений: 121
22.02.2011, 23:54  [ТС]
по теме кто-то может ответить????
0
26 / 26 / 12
Регистрация: 18.02.2011
Сообщений: 51
23.02.2011, 00:01
Поставьте брейк поинт в начале проги, тыкаем f5, затем f10/f11. и смотрим пошагово как выполняется программа. Сей процесс - пошаговый прогон - называется трассировка.
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
23.02.2011, 00:04
ping_rulezzz, зачем такие сложности, можно сразу f10/f11 - начнётся трассировка)))
1
26 / 26 / 12
Регистрация: 18.02.2011
Сообщений: 51
23.02.2011, 00:06
ну да) ... привычка видать)
0
 Аватар для kaffein
5 / 5 / 1
Регистрация: 14.11.2010
Сообщений: 121
23.02.2011, 00:11  [ТС]
а..... ясно! ето я знаю! и етим пользовался, но, в принципе, так и не понял в чём проблема
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
23.02.2011, 00:14
Вы хоть скажите, что вас не устраивает, где происходит ошибка?
0
 Аватар для kaffein
5 / 5 / 1
Регистрация: 14.11.2010
Сообщений: 121
23.02.2011, 00:26  [ТС]
когда я запускаю програму, заполнил список, вишло на исполнение функции dod вискакивает какое-то окно. беру ету функцию в /*......*/ и питаюсь проверить следующую функцию но и там что-то выскакивает.
возьмите попробуйте откомпелировать.
0
 Аватар для kaffein
5 / 5 / 1
Регистрация: 14.11.2010
Сообщений: 121
27.02.2011, 23:04  [ТС]
вот поработал над прогой но все одно не работает посмотрите в чём проблема, а то я всю голову уже сломал
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
зачем этот цикл?
for(list*p = head; p; p = p->next)
если вы его же делает в самой функции fill_list

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

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

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

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

Добавлено через 14 минут
у меня проблема с самим формированием списка я не очень понял етот процес обясните пож на примере
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
28.02.2011, 17:09
А что конкретно не понятно? Мы при каждом добавлении элемента выделяем память под соответствующий элемент и просто выставляем указатели - связи между элементами. Советую нарисовать это процесс на бумажке - тогда станет понятно, какой код и в какой последовательности надо написать, чтобы всё было труъ.
1
 Аватар для kaffein
5 / 5 / 1
Регистрация: 14.11.2010
Сообщений: 121
28.02.2011, 17:26  [ТС]
вот етот участок не очень понятен(к томуже он наверное и не правельно сделан)
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
попробуйте абстрагироваться от препода и написать свой код, используя функции, которые у вас есть. ну или на крайняк - закомменте tail = AddL(AddL( head )); и посмотрите на что это повлияет.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.02.2011, 17:35
Помогаю со студенческими работами здесь

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

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

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

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

Картинка в програму
HELP!!! Нужно вставить картинку в програму напишите пожалуйста полний код как ето сделать зарание БОЛЬШОЕ СПАСИБО


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru