Jump to content
Fórum Script Brasil
  • 0

Organizar um conjunto de struct


Question

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 to post
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      148740
    • Total Posts
      644615
×
×
  • Create New...