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 2typedefstruct{//Type rowint day;int month;int year;float index;}row;typedefstruct{//Array of rows
row arr[MAX];//Number of elementsint 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 leapif(isLeap(y)==366){//February has 29 days
months[1]=29;}//add daysint days = d;int i;//months x daysfor(i =0; i <=(m-1); i++){
days += months[i];}//year x days//Stating year = 2000for(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);return0;}
Pergunta
iTiago019
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...
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
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.