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

Сортировка массива структур - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Помогите переделать malloc в realloc! http://www.cyberforum.ru/cpp-beginners/thread19824.html
Нужно что бы распределение памяти было realoc-ом, помогите пожалуйста Красным выделен malloc //---------------------ZADANIE ------------------------- // Dany natural'noe chislo N, deystvitel'nye chisla // a, ... , a. Poluchit' max (a,...,a) // Vi4islit' (a^2+...+a^2) // ----------------------------------------------------
C++ не используя доп. памяти , найти кол. совподающих значений элементов массива А и В Задача такова: Даны два упорядоченных массива А и В (необязательно одинаковой длины). В каждом из массивов могут быть совподающие элементы. Не используя дополнительной памяти, найти количество совподающих значений элементов А и В (т.е. колличество t, для которых t= A=B ) буду очень рад если поможите Добавлено через 4 минуты 47 секунд Вот пока что я написал...проблема заключается в том... http://www.cyberforum.ru/cpp-beginners/thread19820.html
Конструктор копирования стека C++
Добрый день! Имеется стандартный стек с функ-ми push(), pop(), а так же функ-й, определяющей размерность стека. Нужно написать конструктор копирования для этого стека. Что имеется ввиду под этим заданием? Что все значения, которые будут засовываться в первоначальный стек, будут копироваться в новый стек? На одном из форумов нашла очень похожую проблему, но она там решается через...
C++ Какое максимальное количество натуральных чисел можно выбрать чтобы среди них не было отличающихся в два раза
Помогите пожалуйста у меня защита курсовой завтра по С++ а задача не сделана совсем!!!:( А в С++ я совсем не шарю!!!:'( помогите пожалуйста!!! Заранее Спасибо!!! Какое максимальное колличество натуральных чисел от 1 до 10 можно выбрать чтобы среди них не было отличающихся в два раза!!!
C++ nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex http://www.cyberforum.ru/cpp-beginners/thread19806.html
Доброго времени суток! Начал изучать visual c++ по firststep ru и сразу столкнулся с проблемой вот код с первого занятия: #include "afxwin.h" // MFC Основные и стандартные компоненты class CMainWnd : public CFrameWnd { public: CMainWnd(); // Конструктор по умолчанию };
C++ Найти сумму всех элементов одномерного массива, которые кратны К вобщем нужно решить пару задач к завтрашнему дню а я в массивах вообще нифига не понял=( вот первая задача:нужно найти сумму всех элементов одномерного массива которые кратны К!...я сам попробовал но получилась какаято чушь зарание спасибо Добавлено через 26 минут 24 секунды да и плиз можно с комментариями к коду,хочется знать что к чему подробнее

Показать сообщение отдельно
Rendll
0 / 1 / 0
Регистрация: 04.12.2008
Сообщений: 63
26.12.2008, 21:14     Сортировка массива структур
Помогите с сортировкой даных в массиве структур. Мне нужно реализовать сортировку по любому заданному полю. Вот программа:

Код
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>

///////////////////////////////STRUCTURA//////////////////////////////////////

int n; // kilkist' zapusiv
char filename [80];
FILE *file;
struct STUDENT
{
  char name[20];
  char databirth[20];
  char group[10];
  char ses1[10];
  char ses2[10];
  char ses3[10];
  char ses4[10];
  char ses5[10];
}R[100];

/////////////////////////////vukluk funkciy////////////////////////////

void menu();
void input();
void load();
void edit();
void find();
void sort();
void add();
void pokaz();
void del();

/////////////////////////////////////////////////////////////////////////////

 int r;
void main()
{
 for(r=0;;r++)
 {
	menu();
 }
}

///////////////////////////////GOLOVNE  MENU///////////////////////////////////////

 int zx;
void menu(void)
{
clrscr();

  printf("    Меню користувача\n\n");
  printf("Введiть ваш вибiр та натиснiть ENTER:\n\n");
  printf("   1 - Створити базу\n"); //ok
  printf("   2 - Показати базу\n"); //ok
  printf("   3 - Редагування записiв\n");
  printf("   4 - Пошук записiв\n");  //ok
  printf("   5 - Добавити записи\n");  //ok
  printf("   6 - Видалити записи\n");
  printf("   7 - Показати базу з файлу\n");
  printf("   8 - Сортування записiв\n");
  printf("   0 - Завершити виконання програми\n\n"); //ok?
scanf("%d",&zx);
  if(zx==1) input();
  if(zx==2) load();
  if(zx==3) edit();
  if(zx==4) find();
  if(zx==5) add();
  if(zx==6) del();
  if(zx==7) pokaz();
  if(zx==8) sort();
  if(zx==0) exit(-1);
getch();
}

//##############################//funktsii//###############################//

 void input()    //vvedennya  (1)
 {
clrscr();
 printf("Введiть iмя файлу для збереження:");
 scanf("%s", filename);
 file=fopen(filename,"w+");
 fclose(file);
 printf("Введiть кiлькiсть студентiв:\t");
 scanf("%d",&n);
for(int i=0;i<n;i++)
{
printf("\nСтудент %d\n\t   Iмя:\t",i+1);
scanf("%s",&R[i].name);
printf("\t   Дата нароження:\t\t");
scanf("%s",&R[i].databirth);
printf("\t   Група:\t\t\t");
scanf("%s",&R[i].group);
printf("\t   Результат 1-го екзамену:\t");
scanf("%s",&R[i].ses1);
printf("\t   Результат 2-го екзамену:\t");
scanf("%s",&R[i].ses2);
printf("\t   Результат 3-го екзамену:\t");
scanf("%s",&R[i].ses3);
printf("\t   Результат 4-го екзамену:\t");
scanf("%s",&R[i].ses4);
printf("\t   Результат 5-го екзамену:\t");
scanf("%s",&R[i].ses5);
}

{
if((file=fopen(filename,"wt"))==NULL)
{
printf("Не можливо вiдкрити файл\n");
exit(0);
}
for(int j=0;j<n;j++)
{
 fprintf(file,"%s\n",R[j].name);
 fprintf(file,"%s\n",R[j].databirth);
 fprintf(file,"%s\n",R[j].group);
 fprintf(file,"%s\n",R[j].ses1);
 fprintf(file,"%s\n",R[j].ses2);
 fprintf(file,"%s\n",R[j].ses3);
 fprintf(file,"%s\n",R[j].ses4);
 fprintf(file,"%s\n",R[j].ses5);
}
fclose(file);
}

printf("\nБаза успiшно створена!\nДля повернення в головне меню натистiть будь-яку клавiшу\n");
}
/////////////////////////////////////////////////////////////////////////////

void pokaz(void)   //  pokaz bazu z file (7)
{
  int a,i;
  printf("Введiть назву файлу який хочете вiдкрити:");
  scanf("%s",filename);
  if((file=fopen(filename,"r"))==NULL)
  {
    printf("Не вдалося вiдкрити файл \nПеревiрте чи створений цей файл.\n");
    exit(-1);
  }

  a=0;
  n=0;
	  do{
    if(feof(file)){ 
break;
}
    fgets(R[a].name,19,file); 
for(i=0;i<=strlen(R[a].name);i++) {
      if(R[a].name[i]=='\n') {
        R[a].name[i]='\0';
break;
  }  
}
    fgets(R[a].databirth,19,file); 
for(i=0;i<=strlen(R[a].databirth);i++) {
      if(R[a].databirth[i]=='\n') {
	R[a].databirth[i]='\0'; 
break;
  }
}
    fgets(R[a].group,9,file);  
for(i=0;i<=strlen(R[a].group);i++) {
      if(R[a].group[i]=='\n') {
	R[a].group[i]='\0';
 break; 
  } 
}
    fgets(R[a].ses1,9,file);  
for(i=0;i<=strlen(R[a].ses1);i++) {
      if(R[a].ses1[i]=='\n') {
	R[a].ses1[i]='\0'; 
break; 
  }  
}
    fgets(R[a].ses2,9,file);  
for(i=0;i<=strlen(R[a].ses2);i++) {
      if(R[a].ses2[i]=='\n') {
	R[a].ses2[i]='\0'; 
break;
  }
}
    fgets(R[a].ses3,9,file);  
for(i=0;i<=strlen(R[a].ses3);i++) {
      if(R[a].ses3[i]=='\n') {
	R[a].ses3[i]='\0'; 
break; 
  }  
}
    fgets(R[a].ses4,9,file);  
for(i=0;i<=strlen(R[a].ses4);i++) {
      if(R[a].ses4[i]=='\n') {
	R[a].ses4[i]='\0'; 
break;
  }  
}
    fgets(R[a].ses5,9,file);  
for(i=0;i<=strlen(R[a].ses5);i++) {
      if(R[a].ses5[i]=='\n') {
	R[a].ses5[i]='\0'; 
break; 
  }  
}
      a++;
      n++;
     }while(!feof(file));
 fclose(file);
printf("\nIмя\tДата народження\tГрупа\tЕкз 1\tЕкз 2\tЕкз 3\tЕкз 4\tЕкз 5\n");
for(int f=0;f<n;f++){
  printf("%s\t",R[f].name);
  printf("%s\t",R[f].databirth);
  printf("%s\t",R[f].group);
  printf("%s\t",R[f].ses1);
  printf("%s\t",R[f].ses2);
  printf("%s\t",R[f].ses3);
  printf("%s\t",R[f].ses4);
  printf("%s\n",R[f].ses5);
}
printf("\n\tIнформацiю з файла успiшно зчитано\n Для повернення в головне меню натистiть будь-яку клавiшу\n");
}

/////////////////////////////////////////////////////////////////////////////

void load(void)     //  2
{
printf("\nIмя\tДата народження\tГрупа\tЕкз 1\tЕкз 2\tЕкз 3\tЕкз 4\tЕкз 5\n");
for(int f=0;f<n;f++){
  printf("%s\t",R[f].name);
  printf("%s\t",R[f].databirth);
  printf("%s\t",R[f].group);
  printf("%s\t",R[f].ses1);
  printf("%s\t",R[f].ses2);
  printf("%s\t",R[f].ses3);
  printf("%s\t",R[f].ses4);
  printf("%s\n",R[f].ses5);
}
printf("\n Для повернення в головне меню натистiть будь-яку клавiшу\n");
}
/////////////////////////////////////////////////////////////////////////////


void edit(void)      //redahuvannya 4
{         /////????????????????????????
int w=0,k;
printf("Введiть номер запису для редагування : ");
scanf("%d",&k);
		w=k-1;
printf("\t\tВведiть новi данi:\n");
 printf("Студент %d\t   Iмя\t\t\t\t%s",k,R[k].name);
		k=k+50;

printf("\nСтудент %d",n);
printf("\t   Iмя\t\t\t",n);
scanf("%s",&R[k].name);
printf("\t   Дата народження\t\t\t");
scanf("%s",&R[k].databirth);
printf("\t   Група\t\t\t");
scanf("%s",&R[k].group);
printf("\t   Результат 1-го екзамену\t\t");
scanf("%s",&R[k].ses1);
printf("\t   Результат 2-го екзамену\t\t");
scanf("%s",&R[k].ses2);
printf("\t   Результат 3-го екзамену\t\t");
scanf("%s",&R[k].ses3);
printf("\t   Результат 4-го екзамену\t\t");
scanf("%s",&R[k].ses4);
printf("\t   Результат 5-го екзамену\t\t");
scanf("%s",&R[k].ses5);

	R[w]=R[k];
printf("\nРедагування запису %d завершено\n Для повернення в головне меню натистiть будь-яку клавiшу\n",w+1);
}
/////////////////////////////////////////////////////////////////////////////

 char p1[20],p2[20],p3[10],p4[10],p5[10],p6[10],p7[10],p8[10];
void find(void)      //poshuk 5
{
int w=0,a=0,i,c;
int ii[100];
printf("\nВведiть число для пошуку за вiдповiдним полем запису:\n ");
  printf("\n1 - За Iмям");
  printf("\n2 - За датою народження");
  printf("\n3 - За групою");
  printf("\n4 - За екзаменом 1");
  printf("\n5 - За екзаменом 2");
  printf("\n6 - За екзаменом 3");
  printf("\n7 - За екзаменом 4");
  printf("\n8 - За екзаменом 5");
  printf("\n0 - Для повернення в головне меню\n");
  scanf("%d",&c);
    c=c+50;
if(c==50){menu();}
//////////
if(c==51)
{
	printf("\nВведiть Iмя для пошуку : ");
	scanf("%s",&p1);
	for(i=0;i<=n;i++)
	{
	 if(!strcmp(p1,R[i].name))
	 {
		w=1;
		ii[a]=i;
		a++;
	 }
	}
}

///////////
if(c==52)
{
printf("\nВведiть дату народження для пошуку : ");
scanf("%s",&p2);
 for(i=0;i<=n;i++)
 {
	if(!strcmp(p2,R[i].databirth))
	{
		w=1;
		ii[a]=i;
		a++;
	}
 }
}
//////////
if(c==53)
{
printf("\nВведiть групу для пошуку : ");
scanf("%s",&p3);
 for(i=0;i<=n;i++)
 {
 if(!strcmp(p3,R[i].group))
	{
		w=1;
		ii[a]=i;
		a++;
	}
 }
}
//////////
if(c==54)
{
printf("\nВведiть результат 1-го екзамену для пошуку : ");
scanf("%s",&p4);
	for(i=0;i<=n;i++)
	{
	if(!strcmp(p4,R[i].ses1))
	{
		w=1;
		ii[a]=i;
		a++;
	}
 }
}
///////////////
if(c==55)
{
printf("\nВведiть результат 2-го екзамену для пошуку : ");
scanf("%s",&p5);
	for(i=0;i<=n;i++)
	{
	if(!strcmp(p5,R[i].ses2))
	{
		w=1;
		ii[a]=i;
		a++;
	}
 }
}
////////////////
if(c==56)
{
printf("\nВведiть результат 3-го екзамену для пошуку : ");
scanf("%s",&p6);
	for(i=0;i<=n;i++)
	{
	if(!strcmp(p6,R[i].ses3))
	{
		w=1;
		ii[a]=i;
		a++;
	}
 }
}
/////////////////////////
if(c==57)
{
printf("\nВведiть результат 4-го екзамену для пошуку : ");
scanf("%s",&p7);
	for(i=0;i<=n;i++)
	{
	if(!strcmp(p7,R[i].ses4))
	{
		w=1;
		ii[a]=i;
		a++;
	}
 }
}
////////////////////
if(c==58)
{
printf("\nВведiть результат 5-го екзамену для пошуку : ");
scanf("%s",&p8);
	for(i=0;i<=n;i++)
	{
	if(!strcmp(p8,R[i].ses5))
	{
		w=1;
		ii[a]=i;
		a++;
	}
 }
}

			if(w==1)
			{
		 for(i=0;i<a;i++)
		 {
			printf("\nСтудент %d\nIмя\tДата Народження\tГрупа\tЕкзамен 1\tЕкзамен 3\tЕкзамен 3\tЕкзамен 4\tЕкзамен 5\n",ii[i]+1);
			printf("%s\t",R[ii[i]].name);
			printf("%s\t",R[ii[i]].databirth);
			printf("%s\t",R[ii[i]].group);
			printf("%s\t",R[ii[i]].ses1);
			printf("%s\t",R[ii[i]].ses2);
			printf("%s\t",R[ii[i]].ses3);
			printf("%s\t",R[ii[i]].ses4);
			printf("%s",R[ii[i]].ses5);
		 }
		}
		else{
		 printf("\nНемає такого запису в базi даних\n");}
printf("\n Для повернення в головне меню натистiть будь-яку клавiшу\n");
}
//////////////////////////////////////////////////////////////////////////////

void add()             //dobavlennya 6
{
n++;
file=fopen(filename,"a");
printf("\nСтудент %d\n\t   Iмя\t\t\t\t",n);
scanf("%s",&R[n-1].name);
fprintf(file,"%s\n",R[n-1].name);
printf("\t   Дата народження\t\t\t");
scanf("%s",&R[n-1].databirth);
fprintf(file,"%s\n",R[n-1].databirth);
printf("\t   Група\t\t\t");
scanf("%s",&R[n-1].group);
fprintf(file,"%s\n",R[n-1].group);
printf("\t   Результат 1-го екзамену\t\t");
scanf("%s",&R[n-1].ses1);
fprintf(file,"%s\n",R[n-1].ses1);
printf("\t   Результат 2-го екзамену\t\t");
scanf("%s",&R[n-1].ses2);
fprintf(file,"%s\n",R[n-1].ses2);
printf("\t   Результат 3-го екзамену\t\t");
scanf("%s",&R[n-1].ses3);
fprintf(file,"%s\n",R[n-1].ses3);
printf("\t   Результат 4-го екзамену\t\t");
scanf("%s",&R[n-1].ses4);
fprintf(file,"%s\n",R[n-1].ses4);
printf("\t   Результат 5-го екзамену\t\t");
scanf("%s",&R[n-1].ses5);
fprintf(file,"%s\n",R[n-1].ses5);
fclose(file);
printf("\nДо даної бази успiшно добавлено %d-ий запис\n Для повернення в головне меню натистiть будь-яку клавiшу\n",n);
}
//////////////////////////////////////////////////////////////////////////////

void del(void)   //sterty zapys 7
{
 int pov,i,k;
	 printf("Ви дiйсно хочете знищити запис?? Якщо ТАК, натиснiть 0 та натиснiть ENTER");
	 printf("\nДля повернення в головне меню введiть число вiдмiнне вiд числа '0': ");
	 scanf("%d",&pov);

if(pov==0)
{
printf("\nВведiть номер поля який потрiбно видалити: ");
////////???????????????????????????????????????prymitka/////////////////////
scanf("%d",&k);
if(k!=n)
{    /******/
 for(i=k-1;i<n-1 ;i++)
 {
	R[i]=R[i+1];
 }
}   /******/
else
{   /////
R[k-1].name[0]=0;
R[k-1].databirth[0]=0;
R[k-1].group[0]=0;
R[k-1].ses1[0]=0;
R[k-1].ses2[0]=0;
R[k-1].ses3[0]=0;
R[k-1].ses4[0]=0;
R[k-1].ses5[0]=0;
}  /////
 n--;
 printf("\nЗапису %d бiльше не iснує\n",k);
 printf("Для повернення в головне меню натистiть будь-яку клавiшу\n");
}


else{menu();}
}      
///////////////////////SORT///////////////////////////

void sort(void)      //sort
{
int w=0,a=0,i,c;
int ii[100];
printf("\nВведiть число для сотування за вiдповiдним полем запису:\n ");
  printf("\n1 - За Iмям");
  printf("\n2 - За датою народження");
  printf("\n3 - За групою");
  printf("\n4 - За екзаменом 1");
  printf("\n5 - За екзаменом 2");
  printf("\n6 - За екзаменом 3");
  printf("\n7 - За екзаменом 4");
  printf("\n8 - За екзаменом 5");
  printf("\n0 - Для повернення в головне меню\n");
  scanf("%d",&c);
    c=c+50;
if(c==50){menu();}
//////////
if(c==51)
{
	printf("\nВведiть поле для сортування : ");
	scanf("%s",&p1);
	for(i=0;i<=n;i++)
	{
	 if(!strcmp(p1,R[i].name))
	 {
		w=1;
		ii[a]=i;
		a++;
	 }
	}
}
}
    //kinets programmu
Там где void sort(void) там должна быть сортировка.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 12:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru