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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2011, 19:28   #1
Kolyan11
Новичок
Джуниор
 
Регистрация: 31.05.2011
Сообщений: 9
По умолчанию вывод на экран однофамильцев из файла (си++)

Задача.
Имеется файл с записями студентов (фамилия шифр и 4 оценки экзаменационных)
Необходимо на экран выдать только однофамильцев.
Kolyan11 вне форума Ответить с цитированием
Старый 31.05.2011, 19:52   #2
Anubys
Форумчанин
 
Регистрация: 08.05.2010
Сообщений: 177
По умолчанию

Без структур здесь не обойтись
Anubys вне форума Ответить с цитированием
Старый 31.05.2011, 19:58   #3
Kolyan11
Новичок
Джуниор
 
Регистрация: 31.05.2011
Сообщений: 9
По умолчанию

есть структура..всё есть..проблема в том что в моя функция работает для 2 однофамильцев разных фамилий то есть например
Иванов
Петров
Андреев
Иванов
Петров

он выводит
Иванов
Иванов
Петров
Петров


а..если их больше в одном списке то выводит уже лишних..то есть лишний раз (3 петрова если сделать то выведет 3 и потом еще два)
Kolyan11 вне форума Ответить с цитированием
Старый 31.05.2011, 20:03   #4
Anubys
Форумчанин
 
Регистрация: 08.05.2010
Сообщений: 177
По умолчанию

Если не справишься сам я через 2-3 часа постараюсь помочь, сейчас нет времени. И еще выложи свою наработку, чтобы я немного подправил, ну или меня опередят
Anubys вне форума Ответить с цитированием
Старый 31.05.2011, 20:11   #5
Kolyan11
Новичок
Джуниор
 
Регистрация: 31.05.2011
Сообщений: 9
По умолчанию

Код:
#include "my.h"

void zadacha (fstream&p, MYTYPE&zap)
{  int i,x,n,N=0,q=0,z=0,j=0,k=0,an=0;
   float c;
   p.clear();
   p.seekg(0,ios::end);
	int lens=p.tellg()/(sizeof(MYTYPE));
	MYTYPE* mas=new MYTYPE[lens];
	int *B= new int[lens];
	int *A= new int[lens];
	setlocale(LC_ALL,TEXT("rus"));
	p.seekg(0);
	for(i=0;read(p,mas[i]);i++)
	{ if(mas[i].ex[0]>=3&&mas[i].ex[1]>=3&&mas[i].ex[2]>=3&&mas[i].ex[3]>=3)
		  {
			  mas[j].sr=(mas[i].ex[0]+mas[i].ex[1]+mas[i].ex[2]+mas[i].ex[3])/4;
	           B[j]=i;
			   j++;
			   N++;
	      }
	  else
	  { A[q]=i;
	    q++;
		z++;
	  }
	}     
		  
	   for(i=0;i<N-1;i++)
	   for(j=0;j<N-1;j++)
	   if(mas[j].sr<mas[j+1].sr)
		   { 
			    c=mas[j].sr;
				mas[j].sr=mas[j+1].sr;
				mas[j+1].sr=c;

				x=B[j];
				B[j]=B[j+1];
				B[j+1]=x;
	       }
//Отсортировали средние значения абитуриентов,имеющих удовлетворительные оценки и номера строк соответсвующие этим значениям.
	   
       cout<<TEXT("Список возможных студентов")<<endl<<endl<<shapka<<endl;
        for(i=0;i<N;i++)
	    vivod(mas[B[i]]);
	    cout<<niz<<endl;
//Вывели на экран список абитуриентов,имеющих удовлетворительные оценки,по убыванию.
	 
		cout<<TEXT("Введите количество зачисляемых из списка возможных студентов ")<<endl;
        cin>>n;
		
      cout<<TEXT("Список зачисленных абитуриентов")<<endl<<shapka<<endl;
	 
      for(i=0;i<n;i++)
	  
	  {vivod(mas[B[i]]);
	  k++;
	  }
	  cout<<niz<<endl;

//однофамильцы
 fam(mas,B,k);  
	
//Вывели на экран список зачисленных.    
	  
	 /* cout<<endl<<TEXT("Cписок непоступивших абитуриентов")<<endl;
	  cout<<shapka<<endl;
	  for(i=n;i<N;i++)
		  vivod(mas[B[i]]);
      for(q=0;q<z;q++)
			  vivod(mas[A[q]]);
		  cout<<niz<<endl;
*/

		 
          delete []A;
		  delete []B;
		  delete []mas;
		  getch();
//Вывел на экран список непоступивших.	 
}

void fam (MYTYPE* mas,int*B,int k)
{ int i,j,q=0;
 cout<<TEXT("Список однофамильцев студентов")<<endl;
        cout<<shapka<<endl;
	  for(i=0;i<k;i++)
	  {int an=0;
		  for(j=i+1;j<k;j++)
			  if (strcmp(mas[B[i]].surname,mas[B[j]].surname)==0)

		      {  an++;
                  if (an==1)
				   vivod (mas[B[i]]);
					 vivod(mas[B[j]]);
	          }
	  } 
	  cout<<niz<<endl;

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

Последний раз редактировалось Serge_Bliznykov; 31.05.2011 в 20:38.
Kolyan11 вне форума Ответить с цитированием
Старый 31.05.2011, 20:12   #6
Kolyan11
Новичок
Джуниор
 
Регистрация: 31.05.2011
Сообщений: 9
По умолчанию

вот последняя функция внизу как раз и ищет однофамилььцев(но не знаю как сделать чтоб полноценно работала программа)
Kolyan11 вне форума Ответить с цитированием
Старый 31.05.2011, 20:14   #7
Kolyan11
Новичок
Джуниор
 
Регистрация: 31.05.2011
Сообщений: 9
По умолчанию

там задача изначально немного больше была,но она у меня работает=)в общем там есть абитуриенты с оценками надо по среднему значению их оценок сформировать список возможно зачисленных.потом задать ЭН сколько поступает (то есть какой прием из этого списка) выдаются зачисленные..и потом не зачисленные...вот из этих зачисленных надо вывести список однофамильцев.
Kolyan11 вне форума Ответить с цитированием
Старый 31.05.2011, 20:15   #8
Kolyan11
Новичок
Джуниор
 
Регистрация: 31.05.2011
Сообщений: 9
По умолчанию

тут я правда создал массив структур чтоб постоянно не читать файл..
Kolyan11 вне форума Ответить с цитированием
Старый 31.05.2011, 21:01   #9
ololo-schoolboy
Форумчанин
 
Регистрация: 25.12.2010
Сообщений: 247
По умолчанию

вот так:
Код:
#include<iostream>
#include<fstream>
#include<string>

using namespace std;

struct student
{
	string name;
	int key;
	int mark;
};

void viewInfo(student *p)
{
	cout<<p->name<<'\t'
		<<p->key<<'\t'
		<<p->mark<<endl;
}

void searchPair(student *list[], int n)
{
	for(int i=0;i<n;++i)
		for(int j=0;j<n;++j)
			if(i!=j && list[i]->name==list[j]->name)
				viewInfo(list[i]);
}

int main()
{
	ifstream fd("students.dat");
	if(fd)
	{
		const int MAX_SIZE=100;
		student *list[MAX_SIZE];
		int n=0;
		while (!fd.eof() && n<MAX_SIZE)
		{
			list[n]=new student;
			fd>>list[n]->name;
			fd>>list[n]->key;
			fd>>list[n]->mark;
			++n;
		}
	searchPair(list, n);
	}
	else
	{
		/*...*/
	}
	fd.close();
	cin.get();
	return 0;
}
только searchPair перепишите....

ps ваш код не понял
ololo-schoolboy вне форума Ответить с цитированием
Старый 31.05.2011, 21:14   #10
Anubys
Форумчанин
 
Регистрация: 08.05.2010
Сообщений: 177
По умолчанию

Вот меня и опередили
Anubys вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод XML-файла на экран Sparky Java для Web (EE, Servlet, JSP, Tomcat, Spring MVC) 6 28.01.2011 11:28
Вывод содержимого файла на экран! Nostalgy Общие вопросы C/C++ 5 16.01.2011 19:33
Вывод на экран текста из файла Snegovic Помощь студентам 4 16.09.2010 08:08
вывод файла на экран! Шушелла Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 29.10.2007 09:34