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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.03.2015, 16:24   #1
danilchican
Пользователь
 
Регистрация: 15.11.2011
Сообщений: 19
По умолчанию Двумерный/одномерный массив структур

Здравствуйте! Подскажите пожалуйста как действовать дальше и правильно ли я понял условие самой задачи.

Само условие:
Цитата:
Обработать информацию о фирмах городов. Обработку
прекратить, когда на запрос будет введено слово«end». Фирм в городе
не более пятидесяти. Информация следующая:
- название фирмы(не более тридцати знаков);
- величина налогообложения(не более1 млн. р. – в виде строки);
- дата(месяц– в виде строки) последнего срока внесения налога;
- дата его фактического внесения(строка).
В одной функции внести названия фирм, в другой– величину
налога, в третьей– предельную дату внесения налога и дату, когда
налог погашен(если не внесен, то вводится нуль). В головном модуле
для заданной даты(месяц) вывести в алфавитном порядке пять фирм,
имеющих максимальную задолженность. Глобальные переменные,
системные функции, кроме функций ввода-вывода, не использовать.
Исходный массив сохранить, новых массивов структур не создавать.
Можно объявлять и вводить другую необходимую информацию.
Т.е. из условия следует, что будет несколько городов? Если да, то должна быть привязка фирмы к городу или нет? Я делал через двумерный массив. Дошел пока до сортировки, на ней застопорился...
Правильный ли ход решения? Если нет, то почему и что не так? Надо делать через массив структур или нет?

Последний раз редактировалось danilchican; 12.03.2015 в 16:41.
danilchican вне форума Ответить с цитированием
Старый 12.03.2015, 16:25   #2
danilchican
Пользователь
 
Регистрация: 15.11.2011
Сообщений: 19
По умолчанию

Вот код:
Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <locale.h>
#include <windows.h>
#define EXIT "\nВы завершили ввод фирм."
#define MAX_NUM 50

struct Firms
{
	char FirmName[31];
	char Nalog[8]; // max 1 million
	char DateFact[9];
	char DateLast[9];
};

void AddFirmName(int, int, Firms **);
void AddFirmNalog(int, int, Firms **, int **);
void AddFirmDates(int, int, Firms **);
void Output(int, Firms **, int *, int **);
int Strcmp(char *, char *);

int main()
{
	setlocale(LC_ALL, "russian");

	struct Firms **f = NULL;
	int *num, **nal;
	int NumCities = 0, NumFirms = 0;
	int i = 0, j = 0;
	int kol = 0; 
	bool exit = false;
	char PutMonth[8];
	
	do{
		printf_s("\nВведите кол-во городов: ");
		scanf("%d", &NumCities);
	} while (NumCities<1);

	num = (int *)malloc(NumCities*sizeof(int));
	f = (struct Firms**)malloc(NumCities*sizeof(struct Firms*));
	nal = (int **)malloc(NumCities*sizeof(int *));

	for(i = 0; i < NumCities; i++){

		do{
			printf_s("\nВведите кол-во фирм в %d-м городе: ", i+1);
			scanf("%d", &NumFirms);
		} while (NumFirms<1);

		f[i] = (struct Firms*)malloc(NumFirms*sizeof(struct Firms));
		nal[i] = (int *)malloc(NumFirms*sizeof(int));

		for (j = 0, kol = 0; j<NumFirms; j++, kol++)
		{
				AddFirmName(i, j, f);
				if(strcmp(f[i][j].FirmName, "end") == 0){
					exit = true;
					puts(EXIT);
					break;
				}
				AddFirmNalog(i, j, f, nal);
				if(strcmp(f[i][j].Nalog, "end") == 0){
					exit = true;
					puts(EXIT);
					break;
				}
				AddFirmDates(i, j, f);	
				if((strcmp(f[i][j].DateFact, "end") || strcmp(f[i][j].DateLast, "end")) == 0 ){
					exit = true;
					puts(EXIT);
					break;
				}	
		}

		num[i] = kol;
		if(exit) break;
	}
	
	printf_s("Введите месяц для сортировки: ");
	fflush(stdin);
	scanf_s("%7s", PutMonth, _countof(PutMonth));
	OemToAnsi(PutMonth, PutMonth);

	// Sort by name

		for(i = 0; i < NumCities; i++){
			for(j = 0; j < num[i]; j++){
				if((strcmp(f[i][j].FirmName, f[i][j].FirmName)) > 0) {
					

				}
			}
		}

	if(kol > 0 || num[i-1] > 0) {
		    Output(NumCities, f, num, nal);	
	} else puts("\nФирмы были заполнены некорректно и ввод не был произведён.\n");
	
	system("pause");
	return 0;
}

void AddFirmName(int a, int b, Firms **f) {
	printf_s("\nВведите название %d-й фирмы: ", b + 1);
	fflush(stdin);
	scanf_s("%30s", f[a][b].FirmName, _countof(f[a][b].FirmName));
	OemToAnsi(f[a][b].FirmName, f[a][b].FirmName);
}
void AddFirmNalog(int a, int b, Firms **f, int **nal) {
	printf_s("\nВведите величину налогообложения %d-й фирмы: ", b + 1);
	fflush(stdin);
	scanf_s("%7s", f[a][b].Nalog, _countof(f[a][b].Nalog));
	OemToAnsi(f[a][b].Nalog, f[a][b].Nalog);
	
	int k = 0; 
	nal[a][b] = 0;
	while (f[a][b].Nalog[k] >= '0' && f[a][b].Nalog[k] <= '9')
	{
		nal[a][b] = nal[a][b] * 10 + f[a][b].Nalog[k] - '0';
		k++;
	}
}
void AddFirmDates(int a, int b, Firms **f) {
	printf_s("\nВведите месяц последнего срока внесения налога %d-й фирмы: ", b + 1);
	fflush(stdin);
	scanf_s("%14s", f[a][b].DateFact, _countof(f[a][b].DateFact));
	OemToAnsi(f[a][b].DateFact, f[a][b].DateFact);
			
	printf_s("\nВведите месяц погашения налога %d-й фирмы: ", b + 1);
	fflush(stdin);
	scanf_s("%14s", f[a][b].DateLast, _countof(f[a][b].DateLast));
	OemToAnsi(f[a][b].DateLast, f[a][b].DateLast);
}
void Output(int a, Firms **f, int *num, int **nal) {
	for(int x = 0; x < a; x++)
	{
		printf("\nГород %d:\n", x+1);
			for (int y = 0; y < num[x]; y++)
			{
				printf("\nФирма %d\n %s %d %s %s\n", y + 1, f[x][y].FirmName, nal[x][y], f[x][y].DateFact, f[x][y].DateLast);
			}
	}
}
int Strcmp(char *s1, char *s2)
{
	for(; *s1==*s2; s1++, s2++)
	if(!*s1) return 0;
	return *s1-*s2;
}
danilchican вне форума Ответить с цитированием
Старый 12.03.2015, 22:41   #3
danilchican
Пользователь
 
Регистрация: 15.11.2011
Сообщений: 19
По умолчанию

Тему можно закрывать
danilchican вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программирование в VBA: двумерный массив M на N, нужно создать новый одномерный массив TheAnnihilyator Помощь студентам 1 04.06.2014 09:16
Двумерный массив развернуть в одномерный массив по строкам[QBASIC] TrueStyle777 Помощь студентам 3 29.05.2013 21:56
Двумерный массив структур. Графика. GHOST32 Общие вопросы C/C++ 0 12.05.2013 20:18
двумерный и одномерный массив Sv. Общие вопросы C/C++ 6 21.11.2012 08:58
одномерный массив структур Ann_93 Visual C++ 1 22.02.2012 15:46