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

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

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

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

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

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

Здраствуйте уважаемые форумчани . У меня есть небольшое задание.... Условие:Даны сведения об игрушках - название игрушки, стоимость и возрастные границы (например от 2-5). Сортировать по росту возрастной границы и определить для какого возраста является наиболее игрушек.
Вот я сделал сортировку по возрастной грнице , теперь осталась задача определить для какого возраста является наиболее игрушек.
Подскажите , как єто можно сделать?
Код:
#include "stdafx.h"
#include<stdio.h>
#include<string.h>
#define n 4
struct toy
{ char name[20];
 int price;
 char vikmej[20];
 } toys[n];
void vvod()
{
 int i;
 for (i=0; i<n; i++)
  {
  printf("Enter data toys\n", i+1);
  printf("Enter name:\n");
  scanf("%s", toys[i].name);
  printf("Enter price:\n");
  scanf("%d", &toys[i].price);
  printf("Enter vikovi meji:\n");
  scanf("%s", toys[i].vikmej); 
  printf("\n");
  }
}
void printrezult()
{int z;
  for(z=0;z<n;z++)
  { printf("%s      %d       %s\n\n",toys[z].name,toys[z].price,toys[z].vikmej);
  }
}
void sorted()
{ int i,j,k;
 toy p;
 for(j=0; j<n-1; j++)
  {
   for(k=0; k<n-1; k++)
    {
     if(strcmp(toys[k].vikmej,toys[k+1].vikmej)>0)
      {
       p=toys[k];
       toys[k]=toys[k+1];
       toys[k+1]=p;

      }
    }
  }

}

void main()
{vvod();
 sorted();
 printf("Sort of vikovi meji:\n");
 printf("Name       Price      Vikovi meji\n");
 printrezult();
}
majuw вне форума Ответить с цитированием
Старый 27.04.2013, 12:02   #2
majuw
Пользователь
 
Регистрация: 04.04.2013
Сообщений: 77
По умолчанию

Вот я попробовал сделать правильную сортировку по возрастной грнице, но всеравно что-то не получаеться, не могли б подсказать в чем проблема?
Код:
void sorted()
{ int i,j,k;
  
 
 toy p;
 for(j=0; j<n-1; j++)
   {for(k=0; k<n-1; k++)
	  toys[k].rizn=0;
    toys[k].rizn=(toys[k].yearWith)-(toys[k].yearTo);
   {
     if((toys[k].rizn)<(toys[k+1].rizn))
      {
       p=toys[k];
       toys[k]=toys[k+1];
       toys[k+1]=p;

      }
    }
  }
 }
majuw вне форума Ответить с цитированием
Старый 27.04.2013, 12:33   #3
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

А для k+1 rizn кто считать будет?
Помог? Оставляем отзыв =)
Helloween вне форума Ответить с цитированием
Старый 27.04.2013, 12:44   #4
majuw
Пользователь
 
Регистрация: 04.04.2013
Сообщений: 77
По умолчанию

Можете помочь , что то написал но нечего не получаеться(((...
Код:
void sorted()
{ int i,j,k;
  toys[k].rizn=0;
 
 toy p;
 for(j=0; j<n-1; j++)
   {for(k=0; k<n-1; k++)
	 
    toys[k].rizn=(toys[k].yearWith)-(toys[k].yearTo);
	toys[k+1].rizn=(toys[k+1].yearWith)-(toys[k+1].yearTo);
   {
     if((toys[k].rizn)<(toys[k+1].rizn))
      {
       p=toys[k];
       toys[k]=toys[k+1];
       toys[k+1]=p;

      }
    }
  }
 }
majuw вне форума Ответить с цитированием
Старый 27.04.2013, 15:34   #5
cleac
Пользователь
 
Аватар для cleac
 
Регистрация: 19.04.2013
Сообщений: 27
По умолчанию

Попробуй сортировать по другому.
Лучше будет, если ты будешь проводить разрядную сортировку: первый разряд - минимальный возраст, второй - максимальный. И никаких різниць, чистые сравнения
All rights reserved©.
cleac вне форума Ответить с цитированием
Старый 27.04.2013, 16:08   #6
majuw
Пользователь
 
Регистрация: 04.04.2013
Сообщений: 77
По умолчанию

Можете помочь с кодом для розрядной сортировки?
majuw вне форума Ответить с цитированием
Старый 27.04.2013, 16:32   #7
cleac
Пользователь
 
Аватар для cleac
 
Регистрация: 19.04.2013
Сообщений: 27
По умолчанию

Код:
//arr[] - массив из ваших структур
//а и b - соответственно, верхняя и нижняя возрастные границы
//start и end - соответственно, указатели на первый и последний элементы массива arr[]


void swap(arr* a1,arr* a2)
{
	arr temp;
	temp=*a1;
	*a1=*a2;
	*a2=temp;
}

void sort(arr* start,arr* end)
{
arr* iter1 = start;
while(iter1<end)
	{
		arr* iter2 = start;
		while(iter2<end)
		{
			if((*iter2).a>=(*(iter2+1)).a)
			{
				swap(iter2,(iter2+1));
			}
			iter2++;
		}
		iter1++;
	}

iter1=start;
while(iter1<end)
	{
		arr* iter2 = start;
		while(iter2<end)
		{
			if(((*iter2).a==(*(iter2+1)).a)&&((*iter2).b>=(*(iter2+1)).b))
			{
				swap(iter2,(iter2+1));
			}
			iter2++;
		}
		iter1++;
	}
}
Вот вам двойной пузырек =)
All rights reserved©.

Последний раз редактировалось cleac; 27.04.2013 в 16:57.
cleac вне форума Ответить с цитированием
Старый 27.04.2013, 18:12   #8
majuw
Пользователь
 
Регистрация: 04.04.2013
Сообщений: 77
По умолчанию

Спасибо, но можно как-то по легче , что то через разницу границ?
majuw вне форума Ответить с цитированием
Старый 28.04.2013, 15:16   #9
cleac
Пользователь
 
Аватар для cleac
 
Регистрация: 19.04.2013
Сообщений: 27
По умолчанию

Тогда вам будет при категориях сортировать категорию 2-5 выше категории 6-8, к примеру. Алгоритм будет заведомо нерабочий...
К тому же гляньте на задачу - найти, на какой возраст больше всего игрушек. Так вам гораздо проще будет искать. Это будет что-то такое(в псевдокоде):
Код:
for текущий_возраст to 18 do
     if (текущий_возраст<игрушка.максимальный_возраст) and (текущий_возраст>игрушка.минимальный_возраст) then
           количество[текущий_возраст]:=количество[текущий_возраст]+1;
вывести количество
All rights reserved©.

Последний раз редактировалось cleac; 28.04.2013 в 15:55.
cleac вне форума Ответить с цитированием
Старый 28.04.2013, 19:24   #10
majuw
Пользователь
 
Регистрация: 04.04.2013
Сообщений: 77
По умолчанию

Можете помочь, вот есть сортировка по возрастным границам , для двух нормально сортирует , для трьох и больше уже не хочет...
Код:
#include "stdafx.h"
#include<stdio.h>
#include "stdlib.h"
#include<string.h>
#define n 2
struct toy
{ char name[20];
 int price;
 int yearWith; // первый год, например 2
 int yearTo;
int rizn; // первый год, например 5
 } toys[n];
void vvod()
{
 int i;
 for (i=0; i<n; i++)
  {
  printf("Enter data toys\n", i+1);
  printf("Enter name:\n");
  scanf("%s", toys[i].name);
  printf("Enter price:\n");
  scanf("%d", &toys[i].price);
  printf("Enter vikovi meji:\n");
  scanf("%d %d", &toys[i].yearWith,&toys[i].yearTo); 
 
  printf("\n");
  }
}
void printrezult()
{int z;
  for(z=0;z<n;z++)
  { printf("%s      %d       %d-%d\n\n",toys[z].name,toys[z].price,toys[z].yearWith,toys[z].yearTo);
  }
}
int compare(const void* a, const void* b){
  // приводим переданные параметры к нужному нам типу данных(struct toy)
  struct toy* t1 = (struct toy*)a;
  struct toy* t2 = (struct toy*)b;
  return t1->rizn - t2->rizn;
}
 
void main()
{
vvod();
qsort(toys, 2, sizeof(struct toy), compare);
printf("Sort of vikovi meji:\n");
 printf("Name       Price      Vikovi meji\n");
 printrezult();
}
majuw вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сортировка записей Voldemort93 БД в Delphi 2 17.10.2012 22:56
Сортировка массива записей Юляшко Паскаль, Turbo Pascal, PascalABC.NET 5 28.04.2010 13:57
Сортировка записей, Pascal leench Помощь студентам 5 16.04.2009 22:10
Сортировка записей. Whiplash Паскаль, Turbo Pascal, PascalABC.NET 3 17.12.2008 21:39