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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.03.2010, 16:00   #1
Mirades
Новичок
Джуниор
 
Регистрация: 09.03.2010
Сообщений: 3
Сообщение Вопрос с массивами.

Сразу скажу, что изучаю С++ около месяца, сам + практика в учебном заведении.
Есть задание:

Строка таблицы данных содержит следующую информацию о книгах: автор, наименование, издательство, год издания.

Требуется найти:
- перечень авторов с указанием числа их книг;

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

Код:
// практика.cpp: главный файл проекта.
#include "stdafx.h"
using namespace System;
#include "stdlib.h"
#include "string.h"
#include "conio.h"
#include "stdio.h"
#include "string"
#include "fstream"
using namespace std;
#define n 10

struct books {
 char author[10];
 char name[10];
 char publishing[10];
 int year;};

books box[n];

int in(void){
 int i;
 ifstream infile("c://text.txt");
 for(i=0;i<n;i++){
  infile >> box[i].author;
  infile >> box[i].name;
  infile >> box[i].publishing;
  infile >> box[i].year;}
 return 0;}

int main()
{
 in();
 int a,i,j;
  for(i=0;i<n;i++){
	  for(j=i;j<n;j++){
	   if(strcmp(box[i].author,box[j].author)==0){
   printf("%s\n",box[j].author);}
	  }
 }
 

getch();
}
Mirades вне форума Ответить с цитированием
Старый 09.03.2010, 16:17   #2
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

Держи
Код:
#include "stdlib.h"
#include "string.h"
#include "conio.h"
#include "stdio.h"
#include "string"
#include "fstream"
#include <vector>
#include <iostream>
using namespace std;

#define n 10

struct books 
{
 string author;
 string name;
 string publishing;
 int year;
};


struct author
{
	string name;
	int count;
	author(){}
	author(string nam, int c)
	{
		name.assign(nam.begin(),nam.end());
		count = c;
	}
};

books box[n];


void in(){
 int i;
 ifstream infile("c://text.txt");
 for(i=0;i<n;i++)
 {
  infile >> box[i].author;
  infile >> box[i].name;
  infile >> box[i].publishing;
  infile >> box[i].year;}
}

vector <author> authors;

int main()
{
	in();
	bool found;
	for(int i = 0; i < n; i++)
	{
		found = false;
		for(int j = 0; j < authors.size();j++)
			if(authors[j].name == box[i].author)
			{
				found = true;
				break;
			}
		if(!found)
		{
			authors.push_back(author(box[i].author,0));
			for(int j = 0; j < n; j++)
				if(box[j].author == authors.back().name)
					authors.back().count++;
		}
	}
	for(int i = 0; i < authors.size(); i++)
		cout << authors[i].name << " : " << authors[i].count << " Books" << endl;
	getch();	
	return 0;
}
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 09.03.2010, 16:24   #3
Mirades
Новичок
Джуниор
 
Регистрация: 09.03.2010
Сообщений: 3
По умолчанию

спасибо добрый человек)))
теперь буду разбираться с кодом... если не сложно напиши комменты к добавленному коду... синтаксис, скобки разные.. я над этой задачей уж пару дней бьюсь а ты за 5 мин написал... эх... тоже так хочуууу...

Последний раз редактировалось Mirades; 09.03.2010 в 17:02.
Mirades вне форума Ответить с цитированием
Старый 09.03.2010, 17:10   #4
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

Пожалуйста..
Код:
#include "stdlib.h"
#include "string.h"
#include "conio.h"
#include "stdio.h"
#include "string"
#include "fstream"
#include <vector>   //подключение библиотеки для использования STL массива
#include <iostream> //подключегие библиотеки для использования потоков вывода в консоль
using namespace std;

#define n 10

struct books 
{
 string author;
 string name;
 string publishing;
 int year;
};

 
struct author               //структура для каждого автора
{
	string name;           //имя автора
	int count;             //кол - во написанных им книг
	author(){}             //конструктор по умолчанию 
	author(string nam, int c)  //конструктор с двумя переменными
	{
		name.assign(nam.begin(),nam.end());  //переменной name присваиватся значение переменной nam
		count = c;
	}
};

books box[n];


void in(){
 int i;
 ifstream infile("c://text.txt");
 for(i=0;i<n;i++)
 {
  infile >> box[i].author;
  infile >> box[i].name;
  infile >> box[i].publishing;
  infile >> box[i].year;}
}

vector <author> authors;        //массив структур author, тоесть массив авторов

int main()
{
	in();
	bool found;              //флаг о том что автор существует и книгу надо добавить к существующему автору
	for(int i = 0; i < n; i++)
	{
		found = false;     
		for(int j = 0; j < authors.size();j++)      //поиск автора текущей книги в массиве авторов
			if(authors[j].name == box[i].author)
			{
				found = true;
				break;
			}
		if(!found)                   //если автора не нашли 
		{
			authors.push_back(author(box[i].author,0)); //то добавим автора с кол-во написсаных книг равным нулю
			for(int j = 0; j < n; j++)              //идем по массиву из условия
				if(box[j].author == authors.back().name)  //и если автор книги совпадает с текущим автором
					authors.back().count++;               //то текущему автору плюсуем одну книгу
		}
	}
	for(int i = 0; i < authors.size(); i++)  //выводим ответ
		cout << authors[i].name << " : " << authors[i].count << " Books" << endl;
	getch();	
	return 0;
}
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 09.03.2010, 17:47   #5
Mirades
Новичок
Джуниор
 
Регистрация: 09.03.2010
Сообщений: 3
По умолчанию

благодарю =)))
Mirades вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с массивами Эллочка Помощь студентам 2 18.11.2009 16:14
Проблема с МАССИВАМИ! Help! GorNikSar Паскаль, Turbo Pascal, PascalABC.NET 3 19.12.2008 13:43
помогите с массивами slivochny Общие вопросы C/C++ 7 21.11.2008 12:57
вопрос по сокетам и общение как в ICQ.Сложный вопрос... Руслантус Общие вопросы C/C++ 2 12.08.2008 21:10
Работа с массивами в C# MaskEdit Общие вопросы .NET 3 17.05.2008 17:59