All pastes #475834 Raw Edit

Something

public c v1 · immutable
·published 2007-05-07 18:39 UTC
rendered paste body
//H ASKHSH APOTELEITE APO 3 ARXEIA!//askisi1.c//////////////////////////////////////////////////////#ifdef HAVE_CONFIG_H#include <config.h>#endif#include <stdio.h>#include <stdlib.h>#include <time.h>#include "list.h"/*line and column size */#define LIN 3#define COL 4void input_table(int*,int,int);void print_table(int*,int,int);void print_list(list*);int main(int argc, char *argv[]){	int cnt1,cnt2,a[LIN][COL],*b;	input_table((int*)a,LIN,COL); /*gemizoume ton pinaka */	/******************************************************	IMPORTANT NOTE: o arithmos twn stoixiwn einai tyxeos kai	dinete apo mia rand(). Yparxei loipon periptosi na einai	0 kai etsi o pinakas na einai kenos! Se afthn tin 	periptwsh, ksanatrexte to programma	******************************************************/	list *mylist = ttol(a,LIN,COL); /*Metatrepoume ton pinaka se lista */	b = ltot(mylist); /*Metatrepoume tin Lista se Pinaka */	printf("Note: The table is filled randomly, so there is a chanse to be blank!\n\n");	/*Emfanisi */	print_table(a,LIN,COL); /*Arxikos pinakas */	print_list(mylist); /*Eikona tis listas */	print_table(b,LIN,COL); /*Pinakas-apotelesma apo lista */	return EXIT_SUCCESS; /*Finished */}/*Gemizoume ton pinaka me Tyxea Stoixeia, Se tyxeo  arithmo (mikrotero apo ta misa stoixeia gia na   einai areos. */void input_table(int *tbl, int x, int y){	srand (time(NULL));	int tmp,elm = rand()%((x*y)/2);	/*Arxikopoioume me 0 */	for (tmp = 0; tmp < x*y; tmp++)		tbl[tmp] = 0;	/*Gemizoume tuxees theseis me tixea noumera */	for (tmp = rand()%(x*y);elm > 0;tmp = rand()%(x*y)){		if (!*(tbl+tmp)){ /*Diaforo tou 0 */			tbl[tmp] = rand()%100;			elm--;		}	}	return; /*Finished & return */}void print_table(int *tbl, int x, int y){	int cnt1,cnt2;	/*xrisimopoiontas diktes einai diskolo na diaxeiristoume	  disdiastatous (h kai perisoterwn diastasewn) pinakes	  Gi afto tha doulepsoume etsi: pter[X*linesize + offset] */	for (cnt1 = 0; cnt1 < 3; cnt1++){		for (cnt2 = 0; cnt2 < 4; cnt2++)			printf ("%d\t",tbl[cnt1*4 + cnt2]);		printf("\n");	}	printf("\n\n"); /*Emfanisi enos kenou */	return; /*Finished & return */}void print_list(list *mylist){	node *tmpnode;	/*Diatrexoume kai tiponoume tin lista */	for (tmpnode = mylist->head; tmpnode; tmpnode = tmpnode->next)		printf("%d\t%d\t%d\n",tmpnode->coors[0],tmpnode->coors[1],tmpnode->val);	printf("\n\n"); /*Emfanisi enos kenou */	return; /*Finished & return */}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////list.c/////////////////////////////////////////////////////////////////////////#include <malloc.h>#include <stdlib.h>#include "list.h" /*definition of structs *//*Sinartiseis gia diaxeirisi listas */node * list_createitem(int,int,int);void list_additem(list*,node*);/*"Kyries" synarthseis */list* ttol(int*,int,int); /*table to list */int* ltot(list*); /*list to table */node * list_createitem(int x, int y, int val){	node *newnode = (node *)malloc(sizeof(node));	newnode->coors[0] = x;	newnode->coors[1] = y;	newnode->val = val;	newnode->next = NULL;	return newnode; /*Finished & return */}void list_additem(list *mylist, node *newnode){	if (mylist->head == NULL) /*adeia lista */	{		mylist->head = newnode; /*Arxikopoioume head */		mylist->tail = mylist->head;	}	else	{		mylist->tail->next = newnode; /*Prosthetoume sthn oura */		mylist->tail = mylist->tail->next;	}	return; /*Finished & return */}list* ttol(int *tbl, int x, int y){	int cnt1,cnt2;	node *tmpnode;	list *mylist = (list*)malloc(sizeof(list));	/*thetoume NULL gia apofigi provlimatwn */	mylist->head = NULL;	mylist->tail = NULL;		tmpnode = list_createitem(x,y,0); /*1st node with dimentions */	list_additem(mylist, tmpnode);	/*psaxnoume ton pinaka gia mh mhdenika stoixeia */	for (cnt1 = 0; cnt1 < x; cnt1++){		for (cnt2 = 0; cnt2 < y; cnt2++){			if (tbl[cnt1*y + cnt2] != 0){ /*mh mhdeniko */				/*Dimiourgoume komvo kai prosthetoume stin lista */				tmpnode = list_createitem(cnt1,cnt2,tbl[cnt1*y + cnt2]);				list_additem(mylist, tmpnode);			}		}	}	return mylist; /*Finished & return */}int* ltot(list *mylist){	int x,y,tmp,*tbl;	node *tmpnode;	/*Diastaseis gia desmefsi mnimis */	x = mylist->head->coors[0];	y = mylist->head->coors[1];	tbl=(int*)malloc(x*y*sizeof(int));	for (tmp = 0; tmp < x*y; tmp++)		tbl[tmp] = 0; /*Arxikopoioume se "0" */	/*Diatrexoume tin lista kai antikathistoume ston pinaka */	for (tmpnode = mylist->head->next; tmpnode != NULL; tmpnode = tmpnode->next)		tbl[tmpnode->coors[0]*y + tmpnode->coors[1]] = tmpnode->val;	return tbl; /*Finished & return */}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////list.h/////////////////////////////////////////////////////////////////////////#ifndef LIST_H#define LIST_H/*Node struct */typedef struct list_entry{       int coors[2],val; /*coordinates and value */       struct list_entry *next;}node;/*List struct */typedef struct{        node *head;        node *tail;}list;#endif