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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2010, 13:20   #1
Proger_1
Пользователь
 
Регистрация: 08.03.2010
Сообщений: 21
По умолчанию Структуры/записи/массивы

Только начинаю изучать структуры в с++, нужно написать вот такую программку:
Написать программу, которая создаёт массив записей о книгах, взятых в библиотеке. Использовать структуру, содержащую следующие поля: автор, название книги, дата возврата. Кол-во записей в массиве задаётся пользователем. Данные вводятся с клавиатуры. Написать ф-ции поиска и вывода на экран записей о просроченных книгах, дата возврата которых меньше текущей, и вывода всего массива в виде таблицы (с заголовками и наименованиями столбцов).
Я понимаю, что никто целиком программу писать не будет, я прошу помогать мне постепенно, и может быть по шагам я дойду до верного решения. Начал писать код, для начала попытался создать просто структуру о книгах и проверить дату, но программа работать не хочет

P.S Код отредактировал. Теперь интересует пункт, как заносить много таких записей, то есть не об одной книге. Здесь уже массив нужен ? Или просто цикл как-то запустить скажем:
printf("Enter number of books: ");
scanf("%d",&n);
А далее запускаем цикл до n раз.
Попробовал так, но выводится только одна просроченная книга, а не все, если таковые есть:
Код:
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <math.h>
#include <tchar.h>
using namespace std;

struct biblioteka
{
	char author[20];
	char name[20];
	int date;
};


int _tmain(int argc, _TCHAR* argv[])
{
	biblioteka a;
	int n;
	printf("Enter number of books: ");
	scanf("%d",&n);	
	for (int i=1; i<=n; i++)
	{
	printf("Enter author name: ");
	scanf("%s",a.author);	
	printf("Enter name of book: ");
	scanf("%s",a.name);
	printf("Enter date: ");
	scanf("%d",&a.date);
	}
	if (a.date > 20)
	{
		printf("These books are old:\n%s\n%s\n%d\n",a.author,a.name,a.date);
	}
	else
	{
		printf("These is no old books");
	}
	scanf("%s");
	return 0;
}

Последний раз редактировалось Proger_1; 19.05.2010 в 14:05.
Proger_1 вне форума Ответить с цитированием
Старый 19.05.2010, 14:16   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Да, здесь надо массив. В общем-то, ничего сложного:
Код:
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <math.h>
#include <tchar.h>
using namespace std;

struct biblioteka
{
	char author[20];
	char name[20];
	int date;
};


int _tmain(int argc, _TCHAR* argv[])
{
	biblioteka a[20];
	int n;
	printf("Enter number of books: ");
	scanf("%d",&n);	
	for (int i=0; i<n; i++)
	{
	printf("Enter author name: ");
	scanf("%s",a[i].author);	
	printf("Enter name of book: ");
	scanf("%s",a[i].name);
	printf("Enter date: ");
	scanf("%d",&a[i].date);
	}
	if (a.date > 20)
	{
		printf("These books are old:\n%s\n%s\n%d\n",a[i].author,a[i].name,a[i].date);
	}
	else
	{
		printf("These is no old books");
	}
	scanf("%s");
	return 0;
}
Вроде бы так.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 19.05.2010, 14:32   #3
Proger_1
Пользователь
 
Регистрация: 08.03.2010
Сообщений: 21
По умолчанию

Вот спасибо, подправил чут ьчуть под свой код, там когда вывод, вроде как тоже цикл надо запустить что бы все записи вывести, если их будет больше чем 1:
Код:
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <math.h>
#include <tchar.h>
using namespace std;

struct biblioteka
{
	char author[20];
	char name[20];
	int date;
};


int _tmain(int argc, _TCHAR* argv[])
{
	struct biblioteka mas[100];
	int n,count;
	count=0;
	printf("Enter number of books: ");
	scanf("%d",&n);	
	for (int i=1; i<=n; i++)
	{
	printf("Enter author name: ");
	scanf("%s",mas[i].author);	
	printf("Enter name of book: ");
	scanf("%s",mas[i].name);
	printf("Enter date: ");
	scanf("%d",&mas[i].date);
	}
	printf("These books are old:\n");
	for (int i=0; i<=n; i++)
	{
		if (mas[i].date > 20)
		{
			printf("%s\n%s\n%d\n",mas[i].author,mas[i].name,mas[i].date);
			count++;
		}
	}
	if (count==0)
		{
			printf("These is no old books");
		}
	scanf("%s");
	return 0;
}
Остался последний пункт: вывод всего массива:
Код:
	for (int i=0; i<=n; i++)
	{
		printf("Author: %s\nName: %s\nDate: %d\n",mas[i].author,mas[i].name,mas[i].date);
	}
Не так ?

Последний раз редактировалось Proger_1; 19.05.2010 в 14:39.
Proger_1 вне форума Ответить с цитированием
Старый 19.05.2010, 14:53   #4
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Вроде бы так. Только можете еще добавить вывод номера книжки и отделять их друг от друга одной пустой строкой. Но это уже красявости, а принципиально тут все правильно.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 19.05.2010, 15:28   #5
Proger_1
Пользователь
 
Регистрация: 08.03.2010
Сообщений: 21
По умолчанию

Увидел в условии что вывод массива надо делать в виде таблицы, подумаю как это сделать, первый столбец - автор, второй - название, 3 - дата.
Proger_1 вне форума Ответить с цитированием
Старый 19.05.2010, 19:54   #6
Proger_1
Пользователь
 
Регистрация: 08.03.2010
Сообщений: 21
По умолчанию

Не подскажите как сделать, что бы названия были под столбцами:
Код:
printf("Author    Name    Date\n--------------------------\n");
for (int i=1; i<=n; i++)
{
printf("%s%10s%10d\n", mas[i].author,mas[i].name,mas[i].date);
}
Но длина данных может быть разная, и тогда столбики будут неровные

Последний раз редактировалось Proger_1; 19.05.2010 в 20:28.
Proger_1 вне форума Ответить с цитированием
Старый 19.05.2010, 20:59   #7
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Да, примерно так. Только еще у автора надо длину указать и можно чуть покрасивее оформить (еще красивее - с помощью символов псевдографики):
Код:
printf("Author    |Name      |Date\n----------+----------+----------\n");
for (int i=1; i<=n; i++)
{
printf("%10s|%10s|%10d\n", mas[i].author,mas[i].name,mas[i].date);
}
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 19.05.2010, 21:33   #8
Proger_1
Пользователь
 
Регистрация: 08.03.2010
Сообщений: 21
По умолчанию

Спасибо за помощь!
Proger_1 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
структуры и массивы Dossym Помощь студентам 1 27.02.2010 19:30
структуры и массивы Dossym Помощь студентам 2 27.02.2010 19:18
C++,структуры,NEW,массивы из структур -ushёl- Помощь студентам 2 15.11.2009 20:18
ОСОБЕННОСТИ СТРУКТУРЫ ЗАПИСИ. Паскаль NitriNKa Помощь студентам 1 25.04.2009 17:30
Структуры,Записи в делфи ПРОБЛЕМА mar4elo Общие вопросы Delphi 6 01.12.2008 10:43