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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2009, 22:51   #1
Graf Xandr
Пользователь
 
Регистрация: 03.12.2008
Сообщений: 58
Печаль Сортировка методом выбора на С++, возможно ошибка

Итак, приветствую всех, к сожалению, у меня возник вопрос. Задача такая:
В файле Input.txt содержаться сведения о группе студентов в формате
номер группы
запись о каждом человеке: фамилия, имя, отчество, год рождения, оценки по пяти предметам
Переписать данные файла input.txt в output.txt, отсортировав их по возрастанию средней оценки методом выбора ( среднюю оценку вывести в output.txt для каждого студента ).
Теперь то, что я написал сам:
#include<stdio.h>
#include<string.h>
FILE *f=fopen("input.txt","r");
FILE *h=fopen("output.txt","w");
struct mas {char fam[15],name[15],secondname[15];
int ses[5];
int key;};
void sort(mas *a,int n)
{mas temp;
int lowkey;
int lowindex;
int i,j;
for(i=0;i<n-1;i++)
{lowindex=i; lowkey=a[i].key;
for(j=i+1;j<n;j++)
if (a[j].key<lowkey) {lowkey=a[j].key; lowindex=j;}
temp=a[i]; a[i]=a[lowindex]; a[lowindex]=temp;}
}
void main()
{ int n,m,i,j;
fscanf(f,"%d",&m);
fscanf(f,"%d",&n);
mas *a;
a=new mas [n];
for (i=0; i<n; i++)
{fscanf(f,"%s %s %s",a[i].fam,a[i].name,a[i].secondname);
a[i].key=0;
for(j=0;j<5;j++)
{fscanf(f,"%d", &a[i].ses[j]); a[i].key+=a[i].ses[j];}
/* a[i].key/=float(5);*/}
sort(a,n);
fprintf(h,"%d\n",m);
fprintf(h,"%d\n",n);
for (i=0;i<n;i++)
{fprintf(h,"%s %s %s ",a[i].fam, a[i].name, a[i].secondname);
for (j=0;j<5;j++) fprintf(h,"%d ",a[i].ses[j]);
fprintf(h,"%d\n",a[i].key);}
delete a;
fcloseall();}
Проблема в том, что в файле вывода написано нечто непонятно, символы, большие числа, не имеющие отношения... не могу найти ошибку... Пожалуйста, помогите кто чем сможет! Большое спасибо!
Graf Xandr вне форума Ответить с цитированием
Старый 19.04.2009, 12:19   #2
megachuhancer
Форумчанин
 
Регистрация: 16.04.2009
Сообщений: 247
По умолчанию

Перед параметрами fscanf нужно писать &.
megachuhancer вне форума Ответить с цитированием
Старый 07.05.2009, 21:32   #3
Graf Xandr
Пользователь
 
Регистрация: 03.12.2008
Сообщений: 58
По умолчанию

Извините, что поднимаю тему, но у меня по-прежнему есть ошибка, устранить ее никак не получается. Пробовал ставить &, не помогло. Звучит как то так :"one or more multiply defined symbols found" Есть идеи, профессионалы?
Graf Xandr вне форума Ответить с цитированием
Старый 09.05.2009, 14:28   #4
Graf Xandr
Пользователь
 
Регистрация: 03.12.2008
Сообщений: 58
По умолчанию

Ошибка по про прежнему есть, постановка & не помогла ни чуть ...
Graf Xandr вне форума Ответить с цитированием
Старый 09.05.2009, 15:06   #5
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Graf Xandr, код заключайте в тег CODE ("#" на панели в окне редактирования).
Дальше. Структурируйте код! В том виде, в каком вы его выложили, его читать невозможно.

Приводите пример исходного файла. Как-то нет особого желания придумывать самому (еще и при том, что я сначала не до конца понял его структуру).

Код:
#include<stdio.h>
#include<string.h>

FILE *f=fopen("input.txt","r");
FILE *h=fopen("output.txt","w");

struct mas
{
 char fam[15],name[15],secondname[15];
 int ses[5];
 int key;
};

void sort(mas *a,int n)
{
mas temp;
int lowkey;
int lowindex;
int i,j;
for(i=0;i<n-1;i++)
 {
 lowindex=i; lowkey=a[i].key;
 for(j=i+1;j<n;j++)
  if (a[j].key<lowkey)
   {
    lowkey=a[j].key; lowindex=j;
    }
 temp=a[i]; a[i]=a[lowindex]; a[lowindex]=temp;
 }
}

int  main()
{
int n,m,i,j;
fscanf(f,"%d",&m);
fscanf(f,"%d",&n);
mas *a;
a=new mas [n];

for (i=0; i<n; i++)
 {
 fscanf(f,"%s %s %s",a[i].fam,a[i].name,a[i].secondname);
 a[i].key=0;
 for(j=0;j<5;j++)
  {
   fscanf(f,"%d", &a[i].ses[j]); a[i].key+=a[i].ses[j];
   }
/* a[i].key/=float(5);*/
 }

sort(a,n);
fprintf(h,"%d\n",m);
fprintf(h,"%d\n",n);
for (i=0;i<n;i++)
 {
  fprintf(h,"%s %s %s ",a[i].fam, a[i].name, a[i].secondname);
  for (j=0;j<5;j++)
   fprintf(h,"%d ",a[i].ses[j]);
  fprintf(h,"%d\n",a[i].key);
  }

delete[] a;
fclose(f);
fclose(h);
}
------------------
Graf Xandr, чем качественнее будет исходная информация по заданию, тем быстрее вы получите ответ. И меньше людей пройдут мимо.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка массива методом прямого выбора(Дельфи) Onza Помощь студентам 20 25.01.2009 12:05
Помогите - Сортировка методом пузырька Delphi #Nii Помощь студентам 5 21.12.2008 14:53
сортировка методом двухпроходного пузырька. Net* Общие вопросы C/C++ 3 26.05.2008 07:17