Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 16.05.2013
Сообщений: 15

Найти среднее значение элементов двусвязного списк

25.05.2013, 00:19. Показов 2471. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста! Найти среднее значение элементов двусвязного списка. Я написала код, но он мне выдаёт всегда 0. Не понимаю, где ошибка.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 struct TStudent *curr;
  int n, i, Sum, Sred;
  n=0;
  Sum=0;
  curr=head;
  while(curr!=NULL)
  {
      n++;
      if ((*curr).b_name==Sum)
      {
            for (i = 0; i <= n; i++)
          {
          Sum=Sum+i;
          }
       }
       curr=(*curr).next;
     }
   Sred=Sum/i;
 
  ShowMessage("Среднее значение:" + IntToStr(Sred));
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.05.2013, 00:19
Ответы с готовыми решениями:

Найти среднее значение элементов двумерного массива и подсчитать, сколько в этом массиве элементов, превышающих среднее
Составить программу на Паскале. найти среднее значение элементов двумерного массива и подсчитать, сколько в этом массиве элементов,...

Найти среднее значение отрицательных элементов и вычесть это значение из всех элементов последней строки
1)Найти среднее значение отрицательных элементов и вычесть это значение из всех элементов последней строки Вывести полученный массив на...

Найти среднее значение и среднее отклонение для элементов данных линейных массивов X (n), Y (m)
Найти среднее значение и среднее отклонение для элементов данных линейных массивов X(n),Y(m). Выполнить с использованием процедуры.

10
 Аватар для pizurok
77 / 69 / 20
Регистрация: 05.05.2013
Сообщений: 3,810
25.05.2013, 13:48
Цитата Сообщение от КсенияК Посмотреть сообщение
Помогите пожалуйста! Найти среднее значение элементов двусвязного списка. Я написала код, но он мне выдаёт всегда 0. Не понимаю, где ошибка.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 struct TStudent *curr;
  int n, i, Sum;
  float Sred;
  n=0;
  Sum=0;
  curr=head;
  while(curr!=NULL)
  {
      n++;
          Sum += curr->b_name;
       curr=curr->next;
 }
   Sred=Sum/(float)n;
 
  ShowMessage("Среднее значение:" + FloatToStr(Sred));
Хотя, вообще говоря, хотелось бы посмотреть на объявление TStudent, а также создание списка
0
0 / 0 / 0
Регистрация: 16.05.2013
Сообщений: 15
25.05.2013, 20:16  [ТС]
Спасибо.. но теперь не запускается. Пишет на строчке "Sum += curr->b_name;" ошибку: "Illegal structure operation
"

Вот объявление списка
C++
1
2
3
4
5
6
7
8
9
10
11
12
//описание типа элемента списка
 struct TStudent
 {
   String a_name;
   String b_name;
   String c_name;
   struct TStudent *prev;  //указатель на предыдущий элемент списка
   struct TStudent *next;  //указатель на следующий элемент списка
 };
//глобальные переменная
struct TStudent *head; //указатель на первый элемент списка
struct TStudent *tail; //указатель на последний элемент списка
И создание
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
struct TStudent *curr; // адрес нового элемента
   curr = new TStudent;  // выделение памяти для нового элемента
   (*curr).a_name=Edit1->Text;
   (*curr).b_name=Edit2->Text;
   (*curr).c_name=Edit3->Text;
   if(head == NULL) //если список пустой, то на новый элемент
                    // будут указывать и head и tail
         tail=curr;
   else   //если список не пустой, то prev "бывшего" первого элемента
          //должен по указывать на новый элемент
         (*head).prev=curr;
   (*curr).next=head;
   (*curr).prev=NULL;
   head=curr;
   Edit1->Text="";
   Edit2->Text="";
   Edit3->Text="";
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
25.05.2013, 20:27
видимо, требует точку
0
0 / 0 / 0
Регистрация: 16.05.2013
Сообщений: 15
25.05.2013, 20:41  [ТС]
Не помогает. Я меняла.
0
 Аватар для pizurok
77 / 69 / 20
Регистрация: 05.05.2013
Сообщений: 3,810
26.05.2013, 00:58
Ксения, неудивительно, что мой код не работал) Я же не знал, что в списке не целые числа, а строки. Пойди догадайся без объявления, какого типа b_name.
Только вот меня интересует, что есть "среднее значение", когда каждый элемент списка суть три строки?
0
0 / 0 / 0
Регистрация: 16.05.2013
Сообщений: 15
26.05.2013, 01:54  [ТС]
Извините пожалуйста... Я сама всё плохо понимаю. У меня было задание создать список (обеспечить ввод элементов списка). Ввожу я информацию об ученике и его оценках. Для этого у меня и есть a_name (фамилия), b_name (оценка по одному предмету) и c_name (оценка по другому предмету)...
Это всё у меня получилось.
Но было ещё задание "выполнить работу со списком: определить средний балл". То есть выходит среднее значение всех вводимых оценок по каждому предмету. Но как это сделать, я не знаю. Написала этот код, но, как видите, толку от него нет. Может я вообще не то начала делать?
0
 Аватар для pizurok
77 / 69 / 20
Регистрация: 05.05.2013
Сообщений: 3,810
26.05.2013, 04:01
Цитата Сообщение от КсенияК Посмотреть сообщение
Извините пожалуйста... Я сама всё плохо понимаю. У меня было задание создать список (обеспечить ввод элементов списка). Ввожу я информацию об ученике и его оценках. Для этого у меня и есть a_name (фамилия), b_name (оценка по одному предмету) и c_name (оценка по другому предмету)...
Это всё у меня получилось.
Помогу без проблем, единственное что хотелось бы знать, это сколько оценок у одного ученика?
0
0 / 0 / 0
Регистрация: 16.05.2013
Сообщений: 15
26.05.2013, 12:02  [ТС]
Спасибо Вам)
У одного ученика всего две оценки по алгебре и геометрии.
Но самих учеников может быть бесконечное количество, зависит от того, сколько я введу.
0
 Аватар для pizurok
77 / 69 / 20
Регистрация: 05.05.2013
Сообщений: 3,810
26.05.2013, 14:37
Add добавляет в конец списка, Remove удаляет из конца, AVG расчитывает среднее арифм. всех оценок.
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
struct TStudent
{
    AnsiString name;
    int algebra;
    int geometria;
    struct TStudent *prev;  //указатель на предыдущий элемент списка
    struct TStudent *next;  //указатель на следующий элемент списка
};
//глобальные переменные
struct TStudent *head; //указатель на первый элемент списка
struct TStudent *tail; //указатель на последний элемент списка
struct TStudent *curr;  //указатель на текущий элемент списка
 
//Добавить ученика, s-имя, a - оценка по алгебре, g - оценка по геометрии
void Add(AnsiString s, int a, int g)
{
    //создать новый элемент
    if (head == NULL)   //если список пуст
    {
        head = new TStudent;              //создать элемент
        tail = head;                      //голова и конец совпадают
        head->prev = head->next = NULL;   //остальные указатели пустые
    }
    else
    {
        tail->next = new TStudent;   //создать следующий элемент после конца
        tail->next->prev = tail;     //развернуть указатель prev последнего элемента на предпоследний
        tail = tail->next;           //сдвинуть tail на последний элемент
        tail->next = NULL;           //после tail ничего нет
    }
    //положить в новый элемент значения
    tail->name = s;
    tail->algebra = a;
    tail->geometria = g;
}
 
//Удалить последнего ученика
void Remove()
{
    //удалять только если последний не пуст
    if (tail != NULL)
        if (tail==head)          //если в списке всего один элемент
        {
            delete tail;         //удалить
            tail = head = NULL;  //все указатели обнулить
        }
        else 
        {
            tail = tail->prev;   //указатель tail сдвинуть на предыдущий
            delete tail->next;   //удалить последний
            tail->next = NULL;   //обнулить указатель на следующий после tail
        }
 
}
 
//среднее значение элементов списка
float AVG()
{
    //если в списке есть элементы
    if(head != NULL)
    {
        float sum = 0;
        int count = 0;         //общее количество оценок
        curr = head;           //curr пробегает все элементы с головы
        while(curr != NULL)    //пока curr не пуст
        {
            sum += curr->geometria + curr->algebra;   //добавить к sum оценки текущего ученика
            curr = curr->next;                        //сдвинуть curr
            count += 2;                               //колество оценок увеличить на 2
        }
        return sum / count;
    }
    return 0;
}
Add добавляет даже в пустой список, пример добавления
C++
1
2
Add("олололя", 5,8);   //добавление в список так
Add(Edit1->Text, StrToInt(Edit2->Text), StrToInt(Edit3->Text);    //или так
1
0 / 0 / 0
Регистрация: 16.05.2013
Сообщений: 15
26.05.2013, 15:56  [ТС]
Спасибо Вам)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.05.2013, 15:56
Помогаю со студенческими работами здесь

Найти среднее арифметическое значение четных элементов и среднее арифметическое нечетных элементов и сравнить их между собой
Найти среднее арифметическое значение четных элементов и среднее арифметическое нечетных элементов и сравнить их между собой. Вот часть...

В одномерном массиве определить среднее значение всех элементов,значение которых превышает среднее значение
в произвольно заданном одномерном массиве определить среднее значение всех элементов,значение которых превышает среднее значение

Найти среднее значение элементов массива, разделить каждый элемент на это значение
Вводится произвольный квадратный массив. Нужно найти среднее значение элементов этого массива, разделить каждый элемент на это среднее...

Найти столбик, в котором среднее арифметическое значение из положительных элементов имеет минимальное значение
Никак не могу понять задачу, помогите написать программу, очень нужно ! В части матрицы, расположенной под вспомогательной диагональю,...

Найти среднее значение элементов одномерного массива, состоящего из 15 элементов
Найти среднее значение элементов одномерного массива, состоящего из 15 элементов. К элементам массива, имеющих четные индексы добавить...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной почты. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru