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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.01.2013, 22:43   #1
Man9IK
Новичок
Джуниор
 
Регистрация: 09.01.2013
Сообщений: 1
По умолчанию Сортировка структур

Помогите пожалуйста. Делаю уже месяц, задача простоя а наверно я дурочек не чего не понимаю.
задача 1. Написать программу, в которой необходимо создать структуру, элементами которой являются: имя, фамилия, год рождения студента и оценки по пяти экзаменам. Объявить массив данных о студентах группы типа структуры и ввести значения его элементов. Определить сумму баллов за сессию каждого студента и отсортировать список студентов по баллам в порядке возрастания. Сортировку реализовать в отдельной функции. Предусмотреть меню. Результаты работы программы записать в файл.

вот последнее что с чем работаю. много переделывал и все таки запутался и она перестала вообще работать. раньше не работала не получалась найти общий бал для сортировки. начал его делать и изменять код. читать статьи и в итого не чего хорошего не получилась.

Код:
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define n 20
FILE* files;
struct gurnal
{
	char im;
	char fam;
	int god;
	int mat;
	int fiz;
	int ist;
	int oop;
	int prog;
	float sred;

};
int z=0;
void menu()
{
	printf("1.Zapis studenta\n");
	printf("2.Spisok\n");
	printf("3.Sortirovka\n");
	printf("4.Save and exit\n");
}
void zapis()
{
	gurnal stud[n];
	printf("Imja studenta:");
	scanf("%s",&stud[n].im);
	printf("Familija:");
	scanf("%s",&stud[n].fam);
	printf("Gog rogdenija:");
	scanf("%d",&stud[n].god);
	printf("Ozenka po matem:");
	scanf("%d",&stud[n].mat);
	printf("Ozenka po fizika:");
	scanf("%d",&stud[n].fiz);
	printf("Ozenka po istorii:");
	scanf("%d",&stud[n].ist);
	printf("Ozenka po oop:");
	scanf("%d",&stud[n].oop);
	printf("Ozenka po programmirovanijo:");
	scanf("%d",&stud[n].prog);

	if (z>=n)
	{
		printf("Spisok poln");
	}
	else
	{
		stud[z]=stud;
		z++;
	}
}
void spisok()
{
        int i;
	for(i=0;i<z;i++)
	{
		printf("%d. %s %s god %d mat%d fiz%d ist%d oop%d prog%d\n",i+1,stud[i].im,stud[i].fam,stud[i].mat,stud[i].fiz,stud[i].ist,stud[i].oop,stud[i].prog);
	}
	printf("\n");
}

void sortirovka()
{
	
}



	
int main()
{
	int h;
	for(;;)
	{
	menu();
	printf("\nVvedite nomer:");
	scanf("%d",&h);
		switch(h)
		{
			case(1): zapis();
				break;
			case(2): spisok();
				break;
			case(3): sortirovka();
				break;
			case(4):
			//files=fopen("gurnal save.txt", "w");
			//fputs("gurnal:\n",files);
				//for (int i=0; i<z; i++)
				//{
				//fputs(stud[i].im,files);
				//fputs("\t",files);

				//fputs("\n",files);
				//}
				//fclose(files);

			return 0;
		}
	}
	
}


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 10.01.2013 в 10:00.
Man9IK вне форума Ответить с цитированием
Старый 10.01.2013, 09:22   #2
Blind Guard
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 139
По умолчанию

Код:
char im;
char fam;
...
scanf("%s",&stud[n].im);
scanf("%s",&stud[n].fam);
Вы вводите строки в символы.
Объявите имя и фамилию как строки (массивы символов)

Что эта строка делает? Что есть stud?
Код:
stud[z]=stud;

Последний раз редактировалось Blind Guard; 10.01.2013 в 09:25.
Blind Guard вне форума Ответить с цитированием
Старый 10.01.2013, 12:35   #3
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

Код:
#include "stdio.h"
#include "stdlib.h"

#define COUNT 10

struct Student
{
  char name[160];
  char family[160];
  int year;
  short math_ball;
  short phys_ball;
  short geo_ball;
  short hyst_ball;
  short prog_ball;
};

void sort(Student* arr)
{
  bool ch;
  for(int i = 0; i < COUNT; i++)
  {
	ch = false;
	int sum1,sum2;
	for(int j = 0; j < COUNT - i - 1; j++)
	{
	  sum1 = arr[j].math_ball + arr[j].phys_ball + arr[j].geo_ball + arr[j].hyst_ball + arr[j].prog_ball;
	  sum2 = arr[j+1].math_ball + arr[j+1].phys_ball + arr[j+1].geo_ball + arr[j+1].hyst_ball + arr[j+1].prog_ball;
	  if(sum2 < sum1)
	  {
		Student tmp = arr[j];
		arr[j] = arr[j+1];
		arr[j+1] = tmp;
		ch = true;
      }
	}
	if(!ch)
      break;
  }
}


int main()
{
  Student st[COUNT];
  for(int i = 0; i < COUNT; i++)
  {
    int sum = 0;
	Student _t;
	sprintf(_t.name,"%s%d","student",i+1);
	sprintf(_t.family,"%s%d","stfam",i+1);
	_t.year = rand()%10 + 1985;
	_t.math_ball = rand()%4 + 2;
	_t.phys_ball = rand()%4 + 2;
	_t.geo_ball = rand()%4 + 2;
	_t.hyst_ball = rand()%4 + 2;
	_t.prog_ball = rand()%4 + 2;
	sum = _t.math_ball + _t.phys_ball + _t.geo_ball + _t.hyst_ball + _t.prog_ball;
	printf("%s %s | %d  sum: %d\n math: %d \n phys: %d \n geo: %d \n hyst: %d \n prog: %d \n",
		   _t.name,_t.family,_t.year,sum,_t.math_ball,_t.phys_ball,_t.geo_ball,_t.hyst_ball,_t.prog_ball);
	st[i] = _t;	   
  }
  sort(st);
  printf("Without sort:\n");
  for(int i = 0; i < COUNT; i++)
  {
    printf("%s\n",st[i].name);
  }
  
  return 0;
}
Осталось добавить меню и вывести в файл.
Помог? Оставляем отзыв =)
Helloween вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка массива структур fonRocki Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 24.04.2012 23:00
Сортировка структур Shadow94 Общие вопросы C/C++ 3 30.05.2011 00:50
Сортировка массива структур MrBobyara Помощь студентам 4 16.06.2010 11:48
сортировка массива структур silence_master Помощь студентам 4 05.05.2010 21:26
Сортировка массива структур 3OH! Помощь студентам 4 02.05.2010 21:32