Ir para conteúdo
Fórum Script Brasil
  • 0

Organizar um conjunto de struct


iTiago019

Pergunta

Olá, estou tentando finalizar uma atividade de C, contudo por conta algum erro de lógica eu não consigo organizar um conjunto de struct.

O objetivo é realizar a organização em ordem crescente (dd/mm/yyyy index) e para facilitar o processo eu transformo a data em um inteiro, para assim aplicar o select sort, mas por algum motivo a organização falha...

#include <stdio.h>

#define MAX 2
typedef struct{
	//Type row
	int day;
	int month;
	int year;
	float index;	
}row;
typedef struct{
	//Array of rows
	row arr[MAX];
	//Number of elements
	int count;
} table;
inicializeTable(table *edit_table){
	//Inicialize a table
	edit_table->count = 0;	
}
insertItem(table * edit_table, row new_row){
	//Update a table
	edit_table->arr[edit_table->count] = new_row;
	//Update number of rows
	edit_table->count++;
}
void select_sort(table *sort_table){
	int i, j, min_idx,  d1, m1, y1, d2, m2, y2, days1, days2;
	row swap;
	for (i = 0; i < MAX; i++){
		min_idx = i;
		for (j = i+1; j < MAX; j++){
			d1 = sort_table->arr[j].day;
			d2 = sort_table->arr[min_idx].day;
			m1 = sort_table->arr[j].month;
			m2 = sort_table->arr[min_idx].month;
			y1 = sort_table->arr[j].year;
			y2 = sort_table->arr[min_idx].year;
			days1 = date_to_days(d1, m2, y1);
			days2 = date_to_days(d2, m2, y2);
			if(days1 < days2){
				min_idx = j;
				swap = sort_table->arr[min_idx];
				sort_table->arr[min_idx] = sort_table->arr[j];
				sort_table->arr[j] = swap;
			}
		}
	}
	for(i = 0; i <= MAX; i++){
		printf("%d %d %d \n", sort_table->arr[i].day, sort_table->arr[i].month, sort_table->arr[i].year);
	}
	
	//dd = sort_table->arr[i].day;
	//mm = sort_table->arr[i].month;
	//yyyy = sort_table->arr[i].year;
	//days = date_to_days(dd, mm, yyyy);
}
int isLeap(year){
	int days = 365;
	if(year % 400 == 0){
		//true, the year is leap
		days = 366;
	} else{
		if((year % 4 == 0 )&& (year % 100 != 0)){
			//true, the year is leap
			days = 366;
		}
	}
	return days;
}
int date_to_days(int d, int m, int y){
	int months[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
	//check if the year is leap
	if(isLeap(y) == 366){
		//February has 29 days
		months[1] = 29;
	}
	//add days
	int days = d;
	int i;
	//months x days
	for(i = 0; i <= (m-1); i++){
		days += months[i];
	}
	//year x days
	//Stating year = 2000
	for(i = 2000; i < y; i++){
		//get days of the year and add
		days += isLeap(i);
	}
	return days;
}
int main(){
	row row1;
	table table1;
	inicializeTable(&table1);
	int i;
	for(i = 0; i <= MAX; i++){
		printf("Enter date (d m Y) and index: ");
		scanf("%d %d %d %f", &row1.day, &row1.month, &row1.year, &row1.index);
		insertItem(&table1, row1);
	}
	select_sort(&table1);
	return 0;
}

 

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...