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

Двусвязный список, не работает удаление в середине списка - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Как работать с тем что генерирует gSoap? http://www.cyberforum.ru/cpp-beginners/thread770136.html
Пытаюсь использовать gSoap. Скормил ему wsdl файл, он соответственно нагенерировал мне набор классов. Теперь начинаю разбираться. У сервиса есть метод login, у него параметры логин, пароль и пара необязательных. Почти все строковые. Подключаю proxy класс от gSoap. У него есть метод login, но сигнатура virtual int login(_ns1__login *ns1__login, _ns1__loginResponse *ns1__loginResponse) { return...
C++ Написать программу, которая бы переводила слова «ДОБРЫЙ ДЕНЬ» по выбору на один из пяти языков Здравствуйте. Помогите пожалуйста написать задачи. 1.Написать программу, которая бы переводила слова «ДОБРЫЙ ДЕНЬ» по выбору на один из пяти языков. Заранее спасибо огромное. http://www.cyberforum.ru/cpp-beginners/thread770129.html
C++ Определить, попадает ли точка с вводимыми координатами (x,y) внутрь прямоугольника, заданного уравнениями
Здравствуйте. Помогите пожалуйста написать задачи. 3)Определить, попадает ли точка с вводимыми координатами (x,y) внутрь прямоуголь-ника, заданного уравнениями y=a, y=b, x=c, x=d (a>b, c>d).
C++ Проверьте что X ↓ Y (Функция Вебба, или стрелка Пирса) эквивалентна not (x) and not (y)
Здравствуйте. Помогите пожалуйста написать задачи. 2)Проверьте что X ↓ Y (Функция Вебба, или стрелка Пирса) эквивалентна not (x) and not (y)
C++ Сортировка символов http://www.cyberforum.ru/cpp-beginners/thread770112.html
Создать программу на С++, которая будет продуцировать цепочки(слова) в трехсимвольном алфавите с записью их в файл, причем длина L цепочек ограничена: 5<L<10 и для каждой цепочки, отобранной в файл, должно выполняться условие "символы "cc" начинают ряд, символы "cc" заканчивают ряд, а символы "bb" и "aa" должны быть только парами. Общее количество цепочек в файле должно быть не более 19. Для...
C++ Написать класс, описывающий эллипс Здравствуйте.. необходимо написать программу... столкнулся с трудностями.. помогите кто может.. Написать класс описывающий эллипс ( параметры - его полуоси). Описать след методы: конструктор, нахождение периметра, площади, метод сравнивающий площадь текущего с площадью другого эллипса и возвращающий истину или ложь, конструктор копирования (конструктор с одним параметром (другим эллипсом)... подробнее

Показать сообщение отдельно
Малиновський
0 / 0 / 0
Регистрация: 26.12.2012
Сообщений: 2
23.01.2013, 21:19     Двусвязный список, не работает удаление в середине списка
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
// розрахункова(ПОП).cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#define n 4
 
typedef struct ocinky {
    int TIMS;
    int PrC;
    int SystP;
    int TA;
    int KSAK;
};
 
typedef struct student {
    char *prizv;
    char *name;
    unsigned long int nomer;
    ocinky baly;
    double s_b;
    student *prev,*next;
};
 
void fzapys(student *r);
void deleteEl(student *r,student *z);
 
int main()
{ char imja[n][10],prizvyshche[n][15],nomerst[n][10],tims[n][3],pro[n][3],sp[n][3],ta[n][3],ksak[n][3];
  char *s;
  student *p,*r,*start;
  double ser_b;
  int i,j,b[n],temp;
  for (i=0;i<n;i++) {
      printf("Vvedit prizvyshche studenta(%d): ",i+1); gets(prizvyshche[i]);
      printf("Vvedit imja studenta(%d): ",i+1); gets(imja[i]);
      printf("Vvedit nomer studentskogo kvytka(%d): ",i+1); gets(nomerst[i]);
      printf("Vvedit 5 ochinok studenta(%d)(TIMS,PrC,SystPr,TA,KSAK):\n",i+1); 
      gets(tims[i]); gets(pro[i]); gets(sp[i]); gets(ta[i]); gets(ksak[i]);
      b[i]=i;
      } 
  for (j=0;j<n-1;j++)
  for (i=0;i<n-1-j;i++) if(strcmp(prizvyshche[b[i]],prizvyshche[b[i+1]])>0)
                            { temp=b[i];
                              b[i]=b[i+1];
                              b[i+1]=temp;
                              }
  for (i=0;i<n;i++) 
      printf("%15s|%10s|%10s|%3s|%3s|%3s|%3s|%3s|\n",prizvyshche[b[i]],imja[b[i]],nomerst[b[i]],tims[b[i]],pro[b[i]],sp[b[i]],ta[b[i]],ksak[b[i]]);
  r=NULL;
  for (i=0;i<n;i++) {
      p=(struct student*)malloc(sizeof(struct student));
      p->prev=r;
      p->next=NULL;
      p->prizv=prizvyshche[b[i]];
      p->name=imja[b[i]];
      p->nomer=atoi(nomerst[b[i]]);
      p->baly.TIMS=atoi(tims[b[i]]);
      p->baly.PrC=atoi(pro[b[i]]);
      p->baly.SystP=atoi(sp[b[i]]);
      p->baly.TA=atoi(ta[b[i]]);
      p->baly.KSAK=atoi(ksak[b[i]]);
      p->s_b=(p->baly.TIMS+p->baly.PrC+p->baly.SystP+p->baly.TA+p->baly.KSAK)/5.0;
      r=p;
      p=NULL;
      }
  while((r->prev)!=NULL) {
      start=r;
      r=r->prev;
      r->next=start;
      }
  r->next=start;
  start=r;
  printf("\nSformovanyj spysok:\n");
  while(r!=NULL) {
      printf("|%15s|%10s|%10d|%3d|%3d|%3d|%3d|%3d|%6.2f|\n",r->prizv,r->name,r->nomer,r->baly.TIMS,r->baly.PrC,r->baly.SystP,r->baly.TA,r->baly.KSAK,r->s_b);
      r=r->next;
      }
  r=start;
  p=r;
  printf("\nVvedit serednij bal: "); scanf("%lf",&ser_b);
  for(i=0;i<n;i++) {
      r=p;
      if ((p->s_b)<ser_b) deleteEl(r,start);
      else p=p->next;
      }
  fzapys(start);
  system("pause");
}
 
void fzapys(student *r)
{ FILE* fp;
  char* fname="D:\\out.bin";
  fp=fopen(fname,"at");
  while(r!=NULL) {
      fprintf(fp,"%15s %10s %10d %3d %3d %3d %3d %3d %6.2f \n",r->prizv,r->name,r->nomer,r->baly.TIMS,r->baly.PrC,r->baly.SystP,r->baly.TA,r->baly.KSAK,r->s_b);
      r=r->next;
      }
  fclose(fp);
}
 
void deleteEl(student *r,student *z)
{ student *pr=r->prev;
  student *ne=r->next;
  if ((r->next==NULL)&&(r->prev!=NULL)) {
      r->prev->next=NULL; 
      free(r);
      return;
      }
  if ((r->next!=NULL)&&(r->prev==NULL)) {
      z=r->next;
      r->next->prev=NULL;
      free(r);
      }
  else { pr->next=r->next;
         ne->prev=pr;
         r->next=NULL;
         r->prev=NULL;
         free(r);
         }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 10:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru