Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Created by Matt Bessey on 18/01/2012.
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- typedef struct {
- int x;
- int y;
- int value;
- } point;
- typedef struct l{
- point point;
- struct l* next;
- } list;
- typedef struct {
- int n;
- int m;
- int elements;
- list* first;
- } matrix_list;
- typedef struct y{
- int n;
- int m;
- int elements;
- int *IA;
- int *JA;
- int *A;
- } yale;
- matrix_list* readMatrix(FILE*);
- int convertMatrix(matrix_list*, yale*);
- matrix_list* readMatrix(FILE* file){
- matrix_list* m = calloc(1, sizeof(matrix_list));
- fscanf (file, "%d %*c ", &m->n);
- fscanf (file, "%d", &m->m);
- list* a = calloc(1, sizeof(list));
- fscanf(file, "%d %*c%d %*c%d",&a->point.x,&a->point.y,&a->point.value);
- m->first = a;
- list* end = a;
- m->elements = 1;
- for(char c = fgetc(file); c != EOF; c = fgetc(file)){
- ungetc(c, file);
- list* b = calloc(1,sizeof(list));
- fscanf(file, "%d %*c%d %*c%d",&b->point.x,&b->point.y,&b->point.value);
- end->next = b;
- end = b;
- m->elements++;
- //printf("%d,%d,%d\n",b->point.x,b->point.y,b->point.value);
- }
- return m;
- }
- int convertMatrix(matrix_list* input, yale* output){
- int matrix_elements = input->elements;
- int matrix_rows = input->m;
- int* A = (int*)calloc(matrix_elements, sizeof(int));
- int* IA = (int*)calloc(matrix_rows + 1, sizeof(int));
- int* JA = (int*)calloc(matrix_elements, sizeof(int));
- printf("%d elements\n",matrix_elements);
- output->A = A; // Value
- output->IA = IA; // Row (X)
- output->JA = JA; // Column (Y)
- output->elements = matrix_elements;
- output->m = matrix_rows;
- output->n = input->n;
- list* tmp_list = input->first;
- for(int i = 0, j = 0, tmp_y = 0; i < matrix_elements && tmp_list!=NULL; i++){
- printf("Input Value: %d \n",tmp_list->point.value);
- A[i] = tmp_list->point.value;
- // Initialise the first row
- if(i == 0) IA[0] = tmp_list->point.x;
- else{
- // Add a new row index
- if(tmp_y != tmp_list->point.x){
- j++;
- IA[j] = i;
- tmp_y = tmp_list->point.x;
- }
- }
- JA[i] = tmp_list->point.y;
- tmp_list = tmp_list->next;
- }
- for(int i = 0; i < matrix_elements; i++)
- printf("%d,",output->A[i]);
- printf("\n");
- for(int i = 0; i < matrix_rows + 1; i++)
- printf("%d,",output->IA[i]);
- printf("\n");
- for(int i = 0; i < matrix_elements; i++)
- printf("%d,",output->JA[i]);
- return 1;
- }
- int main (int argc, const char * argv[])
- {
- if (argc==1) {
- perror("No arguments provided\n");
- return -1;
- }
- FILE* pFile;
- pFile = fopen(argv[2], "r");
- if (pFile == NULL) {
- perror("Couldn't open file\n");
- return -1;
- } else {
- //printf("Opened file %s\n",argv[1]);
- }
- matrix_list* pre_yale = readMatrix(pFile);
- yale yale;
- convertMatrix(pre_yale, &yale);
- if (!strncmp(argv[1], "stage3", 6)){
- printf("\n\nBegin Main\n\n");
- for(int i = 0; i < yale.elements; i++)
- printf("%d,",yale.A[i]);
- printf("\n");
- for(int i = 0; i < yale.m + 1; i++)
- printf("%d,",yale.IA[i]);
- printf("\n");
- for(int i = 0; i < yale.elements; i++)
- printf("%d,",yale.JA[i]);
- }
- printf("\n");
- fclose(pFile);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement