Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2013, 18:36   #1
majuw
Пользователь
 
Регистрация: 04.04.2013
Сообщений: 77
По умолчанию Записи в Си.

Подскажите , как можно сортировать за классом и фамилей по другому ?
Код:
#include "stdafx.h"
#include<stdio.h>
#include<string.h>
#include<conio.h>
#define n 2
 

struct UCHENIK
{
 char NAME[20];
 char SURNAME[20];
 int klass;
 } Uchen[n];


 bool is_less(const UCHENIK, const UCHENIK){
	for(int j=0; j<n; j++)
  {
   for(int k=0; k<n; k++)
    {
     if((Uchen[j].klass)<(Uchen[k].klass))
		return true;
	 else 
		 return false;	 
 {int j,k;
 for(j=0; j<n; j++)
  {
   for(k=0; k<n; k++)

 {if(strcmp(Uchen[j].SURNAME,Uchen[k].SURNAME)<0)
      return true;
 else 
	 return false;
   }
 }
 }
   }
	}
 }

void vvod()
{
 int i;
 for (i=0; i<n; i++)
  {
  printf("Enter data pupil\n", i+1);
  printf("Enter name:\n");
  scanf("%s", Uchen[i].NAME);
  printf("Enter surname:\n");
  scanf("%s", Uchen[i].SURNAME);
  printf("Enter form:\n");
  scanf("%d", &Uchen[i].klass); 
  printf("\n");
  }
}
void printrezult()
{int z;
  for(z=0;z<n;z++)
  { printf("%s      %s       %d\n\n",Uchen[z].NAME,Uchen[z].SURNAME,Uchen[z].klass);
  }
}
 
void Surnamesame()
{ int j,k,i;
 UCHENIK p;
 for(j=0; j<n; j++)
  {
   for(k=0; k<n; k++)
    {
     if(strcmp(Uchen[j].SURNAME,Uchen[k].SURNAME)<0)
      {
       p=Uchen[j];
       Uchen[j]=Uchen[k];
       Uchen[k]=p;
	 }
   }
 }
   for (i=0;i<n;i++)
   {if(strcmp(Uchen[i].SURNAME,Uchen[i+1].SURNAME)==0)
    printf ("Surnames same %s\n\n",Uchen[i].SURNAME);
   }
   printf ("Not same surnames \n\n");
}


void sorted()
{ int j,k;
 UCHENIK p;
 for(j=0; j<n-1; j++)
  {
   for(k=0; k<n-1; k++)
    {
     if((Uchen[k].klass)>(Uchen[k+1].klass))
      {
       p=Uchen[k];
       Uchen[k]=Uchen[k+1];
       Uchen[k+1]=p;

      }
    }
  }
}
void surnameklass()
{int j,k,i;
 UCHENIK p;
 for(j=0; j<n; j++)
  {
   for(k=0; k<n; k++)
    {
     if( is_less(Uchen[j], Uchen[k]))
      {
       p=Uchen[j];
       Uchen[j]=Uchen[k];
       Uchen[k]=p;
	 }
   }
 }
}
void main()
{vvod();
 printf("By sort:\n");
 printf("Name       Surname      Klass\n");
 printrezult();
 Surnamesame();
 sorted();
 printf("Sort of form:\n");
 printf("Name       Surname      Klass\n");
 printrezult();
 surnameklass();
 printf("Sort of form and surname:\n");
 printf("Name       Surname      Klass\n");
 printrezult();
 getch();
}
___________________________________ ___________
Вот мой вариант сортировки за классом и фамилей
Код:
bool is_less(const UCHENIK, const UCHENIK){
	for(int j=0; j<n; j++)
  {
   for(int k=0; k<n; k++)
    {
     if((Uchen[j].klass)<(Uchen[k].klass))
		return true;
	 else 
		 return false;	 
 {int j,k;
 for(j=0; j<n; j++)
  {
   for(k=0; k<n; k++)

 {if(strcmp(Uchen[j].SURNAME,Uchen[k].SURNAME)<0)
      return true;
 else 
	 return false;
   }
 }
 }
   }
	}
 }

void surnameklass()
{int j,k,i;
 UCHENIK p;
 for(j=0; j<n; j++)
  {
   for(k=0; k<n; k++)
    {
     if( is_less(Uchen[j], Uchen[k]))
      {
       p=Uchen[j];
       Uchen[j]=Uchen[k];
       Uchen[k]=p;
	 }
   }
 }
}
majuw вне форума Ответить с цитированием
Старый 22.04.2013, 21:18   #2
majuw
Пользователь
 
Регистрация: 04.04.2013
Сообщений: 77
По умолчанию

Что никто не может подсказать?
majuw вне форума Ответить с цитированием
Старый 22.04.2013, 21:47   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А чем эта сортировка не устроила?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.04.2013, 21:54   #4
majuw
Пользователь
 
Регистрация: 04.04.2013
Сообщений: 77
По умолчанию

Да преподавателю не понравилась , сказал делай по другому , а я как знал , так и сделал, если можете то помогите!!!!
majuw вне форума Ответить с цитированием
Старый 22.04.2013, 22:09   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Мдя... Я бы тоже в принципе за такой код двойки ставил.
Код:
bool is_less(UCHENIK u1, UCHENIK u2){
 return 
   (u1.klass<u2.klass) 
 && 
   strcmpi(u1.SURNAME,u2.SURNAME)<0
 ;
}
Вот для начала я бы так упростил. Сортировку в принципе можно оставить.
I'm learning to live...

Последний раз редактировалось Stilet; 23.04.2013 в 15:50.
Stilet вне форума Ответить с цитированием
Старый 22.04.2013, 22:47   #6
majuw
Пользователь
 
Регистрация: 04.04.2013
Сообщений: 77
По умолчанию

Спасибо огромное.
majuw вне форума Ответить с цитированием
Старый 23.04.2013, 08:23   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Пожалуйста )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.04.2013, 15:04   #8
tools
Форумчанин
 
Регистрация: 07.10.2008
Сообщений: 213
По умолчанию

вместо битового AND, логическое
tools вне форума Ответить с цитированием
Старый 23.04.2013, 15:50   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Согласен. Поправил пост.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.04.2013, 17:24   #10
majuw
Пользователь
 
Регистрация: 04.04.2013
Сообщений: 77
По умолчанию

Помогите, в чем ошибка? Не хочет сортировать по фамилии и классу....
Код:
#include "stdafx.h"
#include<stdio.h>
#include<string.h>
#define n 2
struct UCHENIK
{
 char NAME[20];
 char SURNAME[20];
 int klass;
 } Uchen[n];
bool is_less(UCHENIK u1, UCHENIK u2){
 return 
   (u1.klass<u2.klass)&& strcmpi(u1.SURNAME,u2.SURNAME)<0;  
}
//сравнивает строки вне зависимости от типа регистра

void vvod()
 {int i;
 for (i=0; i<n; i++)
 {printf("Enter data pupil\n", i+1);
  printf("Enter name:\n");
  scanf("%s", Uchen[i].NAME);
  printf("Enter surname:\n");
  scanf("%s", Uchen[i].SURNAME);
  printf("Enter form:\n");
  scanf("%d", &Uchen[i].klass); 
  printf("\n");
  }
}
void printrezult()
{int z;
  for(z=0;z<n;z++)
  printf("%s      %s       %d\n\n",Uchen[z].NAME,Uchen[z].SURNAME,Uchen[z].klass);
}
void Surnamesame()
{ int j,k,i;
 UCHENIK p;
 for(j=0; j<n; j++)
  {
   for(k=0; k<n; k++)
    {
     if(strcmp(Uchen[j].SURNAME,Uchen[k].SURNAME)<0)
      {
       p=Uchen[j];
       Uchen[j]=Uchen[k];
       Uchen[k]=p;
	 }
   }
 }
for (i=0;i<n;i++)
   {if(strcmp(Uchen[i].SURNAME,Uchen[i+1].SURNAME)==0)
      printf ("Surnames same %s\n\n",Uchen[i].SURNAME);
   }
printf ("Not same surnames \n\n");
}
void surnameklass()
{int j,k;
 UCHENIK p;
 for(j=0; j<n; j++)
  {
   for(k=0; k<n; k++)
    {
     if( is_less(Uchen[j], Uchen[k]))
      {
       p=Uchen[j];
       Uchen[j]=Uchen[k];
       Uchen[k]=p;
	 }
   }
 }
}

void main()
{vvod();
 surnameklass();
 printf("Sort of form and surname:\n");
 printf("Name       Surname      Klass\n");
 printrezult();
 Surnamesame();
}
majuw вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удалить записи из таблицы, если дата в записи старше 30 дней Aleksandr БД в Delphi 10 28.03.2013 21:33
Оцените математической формулой, насколько больше цифр в двоичной записи большого числа, чем в его десятичной записи. Анюта.Хом Помощь студентам 1 02.12.2011 23:13
Записи Т@нзиля Помощь студентам 1 29.04.2011 13:52
записи Серый777 Паскаль, Turbo Pascal, PascalABC.NET 1 02.06.2010 20:33
записи angel# Паскаль, Turbo Pascal, PascalABC.NET 0 29.04.2010 01:23