Λύσεις των ασκήσεων για το μάθημα Προγραμματισμός II

 

 

(Λύση 1)        

#include <stdio.h>

#include <conio.h>

#include <string.h>

 

int str_index(char *s, char *t);

 

main()

{

  char *s="piriminimikirhimi",*t="mi";     int pos;

  pos=str_index(s,t);

  if (pos!=0)     printf("Last encounter of '%s' in '%s' is in the %d place\n",t,s,pos);

  else printf("'%s' does not include '%s'\n",s,t);

}

int str_index(char *s, char *t)     {

  char *fnd;

  int pos=0;

  do

  {

    fnd=strstr(s,t);

    if (fnd!=NULL)

    {

      pos=pos+fnd-s+1;

      printf("pos=%d\n",pos);

      s=fnd+1;

      printf("s=%s\n",s);     

    }

  } while (fnd!=NULL);

  return(pos);

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(Λύση 2)        

#include <stdio.h>

#include <conio.h>

         

int endofsentence(char ch);

int endofword(char ch);

void displayresults(int s, int w, int c);

 

void main()

{

  FILE *f1;

  int s=0,w=0,c=0;

  char ch;

f1=fopen("file1.dat","r");

  while ((ch=getc(f1))!=EOF)

  {

    putchar(ch);

    s=s+endofsentence(ch);

    w=w+endofword(ch);

    c++;

  }

  displayresults(s,w,c);

  fclose(f1);

}

int endofsentence(char ch)

{

  if ((ch=='.') || (ch==';') || (ch=='!')) return(1);

  else return(0);

}

int endofword(char ch)

{

  if ((ch=='.') || (ch==';') || (ch=='!') || (ch==' ') || (ch==',')) return(1);

  else return(0);

}

void displayresults(int s, int w, int c)

{

  printf("\n\nNumber of sentences:%d\nNumber of words:%d\nNumber of characters:%d",s,w,c );

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(Λύση 3)        

#include <stdio.h>

#include <conio.h>

#include <assert.h>

#include <stdlib.h>

void pwr(int *array_ptr, int array_size);

void main()  {

  int array[1],cnt,i,*array_ptr,size=0;

  /*       Ο πίνακας array[1] χρησιμοποιείται για να μπορέσουμε στο πρώτο σκέλος να διαβάσουμε ένα προς ένα τα δεδομένα και να υπολογίσουμε τον αριθμό του*/

  FILE *f1;

//          1ο σκέλος

  f1=fopen("input_file.txt","r");

  while (fread(array,sizeof(int),1,f1)) size++;      /*         Όσο η fread() δίνει έξοδο διάφορη του μηδενός, δηλαδή διαβάζει ένα στοιχείο, συνέχισε να διαβάζεις από το αρχείο και αύξανε το μετρητή των στοιχείων που περιέχονται σε αυτό*/

  fclose(f1);

//          2ο σκέλος

  f1=fopen("input_file.txt","r");

  array_ptr=(int *)malloc(size*sizeof(int)); assert(array_ptr!=NULL);

 

//          3ο σκέλος

  fread( array_ptr,sizeof(int),size,f1 );

  fclose(f1);

 

//          4ο σκέλος

  pwr(array_ptr,size);

  f1=fopen("output_file.txt","w");

  fwrite(array_ptr,sizeof(int),size,f1);

  fclose( f1 );

 

//          5ο σκέλος

  free(array_ptr);

  system("pause");

}                      // Τέλος της main

void pwr(int *array_address, int array_size)  {

  int i;

  for (i=0;i<array_size;i++)  {

    array_address[i]=array_address[i]*array_address[i];

    //      Εναλλακτικά:   *(array_address+i)=*(array_address+i)*(*(array_address+i));

  }

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(Λύση 4)        

#include <conio.h>

#include <stdio.h>

#define SIZE 300

 

struct addressT

{

  char street_name[30];

  int street_number;

  char city[30];

  int zip_code;

};

struct CustomerT  {

  char name[20];

  char surname[40];

  addressT address;

  char tele[15];

  char job[50];

};

void save_data(FILE *fp,CustomerT *list);

void read_data(FILE *fp,CustomerT *list);

void read_customer(FILE *fp,CustomerT *s,int k);

void save_customer(FILE *fp,CustomerT *s,int k);

 

main()

{

  CustomerT customer_list[SIZE];

  // Έστω ότι φορτώθηκαν όλα τα στοιχεία των συνδρομητών στον πίνακα

  FILE *f1;

  f1=fopen("customers.dat","wb+");

  save_data(f1,customer_list);

  read_data(f1,customer_list);

  read_customer(f1,&customer_list[15],15);      //16oς συνδρομητής

  // Μεταβολή των στοιχείων του 16ου συνδρομητή

  save_customer(f1,&customer_list[15],15);

}

void save_data(FILE *fp,CustomerT *list)  {

  int i;

  rewind(fp);

  for (i=0;i<SIZE;i++)  fwrite(&list[i],sizeof(CustomerT),1,fp);

  // Ισοδύναμα: fwrite(list,sizeof(CustomerT),SIZE,fp);

}

 

void read_data(FILE *fp,CustomerT *list)  {

  rewind(fp);

  fread(list,sizeof(CustomerT),SIZE,fp);

}

 

void read_customer(FILE *fp,CustomerT *s,int k )  {

  fseek(fp,k*sizeof(CustomerT),SEEK_SET);

  fread(s,sizeof(CustomerT),1,fp);

}

 

void save_customer(FILE *fp,CustomerT *s,int k)  {

  fseek(fp,k*sizeof(CustomerT),SEEK_SET);

  fwrite(s,sizeof(CustomerT),1,fp);

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(Λύση 5)        

#include <stdio.h>

#include <stdlib.h>

#include <assert.h>

#include <limits.h>

 

#define SIZE 10

 

int find_max(int cnt, int *buffer);

 

main()

{

  FILE *fin;

  int cnt,index,deiktis=1,i,*buf,local_max,total_max=INT_MIN;

  fin=fopen("file_b.dat","rb"); assert(fin!=NULL);

  buf=(int *)malloc(SIZE*sizeof(int)); assert(buf!=NULL);

  do

  {

    cnt=fread(buf,sizeof(int),SIZE,fin);

    local_max=find_max(cnt,buf);

if (local_max>total_max)

    {

      total_max=local_max;

      index=deiktis;

    }      // τέλος της if

    deiktis++;

  } while ((cnt!=0) && (cnt==SIZE));

  printf("The maximum integer is %d and was found in the %d block\n",total_max,index);

  free(buf);

}          // τέλος της main

 

int find_max(int cnt, int *buffer)

{

  int i,maximum;

  maximum=buffer[0];

  for (i=0;i<cnt;i++)

    if (buffer[i]>maximum) maximum=buffer[i];

  return(maximum);

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(Λύση 6)        

#include <stdlib.h>

#include <stdio.h>

#include <assert.h>

 

void read_data(int **parr, int n, int m);

void calc(int **parr, int *psom, int n, int m);

 

void main()

{

  int **arr,*som,i,j,n,m;

  printf("\nGive arr's first dimension (n) = ");

  scanf("%d",&n);

  printf("\nGive arr's second dimension (m) = ");

  scanf("%d",&m);

 

  arr=(int **)malloc(n*sizeof(int *)); assert(arr!=NULL);

  for (i=0;i<n;i++)

  {

    arr[i]=(int *)malloc(m*sizeof(int)); assert(arr[i]!=NULL);

  }

  som=(int *)malloc(n*sizeof(int)); assert(som!=NULL);

 

  read_data(arr,n,m);

  calc(arr,som,n,m);

  FILE *f1;

  f1=fopen("put_data.dat","w");

  fprintf(f1,"arr=\n");

  for (i=0;i<n;i++)

  {

    for (j=0;j<m;j++)  fprintf(f1,"\t%c\t",arr[i][j]);

    fprintf(f1,"\n");

  }

  fclose(f1);

  printf("\n\nsom=\n");

  for (j=0;j<n;j++)  printf("\t%d\t",som[j]);

  printf("\n");

 

  free(som);

  for (i=(n-1);i>=0;i--) free(arr[i]);

  free(arr);

 

  printf("\n");

  system("pause");

}

 

void read_data(int **parr, int n, int m)

{

  int i,j;

  for (i=0;i<n;i++)

    for (j=0;j<m;j++)

    {

     do

     {

       printf("\narr[%d][%d] (within [65,90])= ",i,j);

       scanf("%d",&parr[i][j]);

     } while ((parr[i][j]<65) || (parr[i][j]>90));

    }

}

 

void calc(int **parr, int *psom, int n, int m)

{

  int i,j;

  for (i=0;i<n;i++)

  {

    psom[i]=parr[i][0];

    for (j=1;j<m;j++) psom[i]=psom[i]+parr[i][j];

  }

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(Λύση 7)        

#include <stdlib.h>

#include <stdio.h>

#include <assert.h>

 

struct vect

{

  float x,y;

};

 

void read_data(vect *parr, int n);

void stats(vect *parr, int n);

 

void main()

{

  int n;

  vect *arr;

  printf(" dim(arr) = ");

  scanf("%d",&n);

  arr=(vect *)malloc(n*sizeof(vect)); assert(arr!=NULL);

  read_data(arr,n);

  stats(arr,n);

  free(arr);

}

void read_data(vect *parr, int n)

{

  int i;

  for (i=0;i<n;i++)    {

    printf("\n arr[%d].x=  ",i);      scanf("%f",&parr[i].x);

    printf("\n arr[%d].y=  ",i);      scanf("%f",&parr[i].y);

  }

}

void stats(vect *parr, int n)

{

  int i;

  float aver,minim,maxim;

  FILE *f1;

  f1=fopen("put_data.dat","w"); assert(f1!=NULL);

  fprintf(f1,"A =\t%f\t\t%f\n",parr[0].x,parr[0].y);

  minim=parr[0].x;         maxim=parr[0].x;          aver=parr[0].x;

  for (i=1;i<n;i++)   {

    if (parr[i].x>=maxim) maxim=parr[i].x;          if (parr[i].x<minim) minim=parr[i].x;

    aver=aver+parr[i].x;

    fprintf(f1,"\t%f\t\t%f\n",parr[i].x,parr[i].y);

  }

  fclose(f1);

  aver=aver/n;

  printf("\nmin=%f\tmax=%f\taverage=%f\n",minim,maxim,aver);

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(Λύση 8)        

#include <stdlib.h>

#include <stdio.h>

#include <assert.h>

 

void read_data(int *pA, int size);

void stats(int *pA, int size);

 

void main()

{

  int *A,n;

  printf(" dim(A) = ");

  scanf("%d",&n);

  A=(int *)malloc(n*sizeof(int)); assert(A!=NULL);

  read_data(A,n);

  stats(A,n);

  free(A);

 

  printf("\n\n");

  system("pause");

}

 

void read_data(int *pA, int size)   {

  int i;

  for (i=0;i<size;i++)   {

    printf("\n A[%d]=  ",i);

    scanf("%d",&pA[i]);

  }

}

 

void stats(int *pA, int size)   {

  int i,minim,maxim=0;

  float aver;

  FILE *f1;

  f1=fopen("put_data.dat","w"); assert(f1!=NULL);

  fprintf(f1,"A = [%d  ",pA[0]);  minim=pA[0];   maxim=pA[0];  aver=pA[0];

  for (i=1;i<size;i++)   {

    if (pA[i]>=maxim) maxim=pA[i];       if (pA[i]<minim) minim=pA[i];

    aver=aver+pA[i];

    fprintf(f1,"%d  ",pA[i]);

  }

  aver=aver/(float)size;

  fprintf(f1,"]\nmin=%d\tmax=%d\taverage=%f\n",minim,maxim,aver);

  fclose(f1);

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(Λύση 9)        

#include <stdio.h>

#include <stdlib.h>

#include <assert.h>

#include <math.h>

 

#define SIZE 16

 

float get_ave(int cnt, float *buffer);

 

main()

{

  FILE *fin;

  int cnt,index_max,index_min,deiktis=1,i;

  float *buf,local_ave,max_ave,min_ave;

 

  fin=fopen("file_b.dat","rb"); assert(fin!=NULL);

  buf=(float *)malloc(SIZE*sizeof(float)); assert(buf!=NULL);

  do

  {

    cnt=fread(buf,sizeof(float),SIZE,fin);

    local_ave=get_ave(cnt,buf);

    if (deiktis==1)

    {

      max_ave=local_ave; index_max=deiktis;

      min_ave=local_ave; index_min=deiktis;

    }

    else if (local_ave>max_ave)

    {

      max_ave=local_ave;

      index_max=deiktis;

    }

    else if (local_ave<min_ave)

      {

        min_ave=local_ave;

        index_min=deiktis;

      }

    deiktis++;

  } while ((cnt!=0) && (cnt==SIZE));

 

 

  printf("The maximum average is %f and was found in the %d block\n",max_ave,index_max);

  printf("The minimum average is %f and was found in the %d block\n",min_ave,index_min);

  free(buf);

}

 

float get_ave(int cnt, float *buffer)

{

  int i;

  float aver=0.0;

  for (i=0;i<cnt;i++)  aver=aver+buffer[i];

  aver=aver/cnt;

  return(aver);

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(Λύση 10)      

#include <stdio.h>

#include <math.h>

#include <conio.h>

#include <stdlib.h>

#include <assert.h>

 

int getMax(float **pArray, int size, int i);

 

void main()

{

  FILE *pF;

  int i,j,col,size;

  float **pArr,*buffer,trace=0.0;

  do

  {

    printf("Give the size of the array (>=3):  ");

    scanf("%d",&size);

  } while (size<3);

  pArr=(float **)malloc(size*sizeof(float *)); assert(pArr!=NULL);

  for (i=0;i<size;i++)

  {

    pArr[i]=(float *)malloc(size*sizeof(float)); assert(pArr[i]!=NULL);

  }

 

  for (i=0;i<size;i++)

    for (j=0;j<size;j++)

    {

      printf("\nA[%d][%d]:  ",i+1,j+1);

      scanf("%f",&pArr[i][j]);

    }

 

  for (i=0;i<size;i++)

  {

    trace=trace+pArr[i][i];

    col=getMax(pArr,size,i);

    printf("\nLine %d: column %d, size=%f",i+1,col+1,fabs(pArr[i][col]));

  }

  printf("\n\nTrace(A)=%f\n",trace);

 

  for (i=(size-1);i>=0;i--) free(pArr[i]);

  free(pArr);

  printf("\n");

  system("pause");

}

 

int getMax(float **pArray, int size, int i)

{

  int j,col;

  float maxim;

  maxim=fabs(pArray[i][0]);

  col=0;

  for (j=1;j<size;j++)

    if (fabs(pArray[i][j])>maxim)

      {

        maxim=fabs(pArray[i][j]);

        col=j;

      }

  return(col);

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(Λύση 11)      

#include <stdio.h>

#include <math.h>

#include <conio.h>

#include <stdlib.h>

#include <assert.h>

 

void permute_columns(float **pArray, int size, int column1, int column2);

void permute_lines(float **pArray, int size, int line1, int line2);

 

void main()

{

  FILE *pF;

  int i,j,col,size;

  float **pArr,*buffer,trace=0.0;

  do

  {

    printf("Give the size of the array (>=3):  ");

    scanf("%d",&size);

  } while (size<3);

  pArr=(float **)malloc(size*sizeof(float *)); assert(pArr!=NULL);

  for (i=0;i<size;i++)

  {

    pArr[i]=(float *)malloc(size*sizeof(float)); assert(pArr[i]!=NULL);

  }

 

  for (i=0;i<size;i++)

    for (j=0;j<size;j++)

    {

      printf("\nA[%d][%d]:  ",i+1,j+1);

      scanf("%f",&pArr[i][j]);

    }

 

  printf("\n\nActual array:");

  for (i=0;i<size;i++)

  {

    printf("\n");

    for (j=0;j<size;j++)  printf("\t%10.4f",pArr[i][j]);

  }

 

  permute_columns(pArr,size,1,2);

  permute_lines(pArr,size,0,2);

 

  printf("\n\nFinal array:");

  for (i=0;i<size;i++)

  {

    printf("\n");

    for (j=0;j<size;j++)  printf("\t%10.4f",pArr[i][j]);

  }

 

  for (i=(size-1);i>=0;i--) free(pArr[i]);

  free(pArr);

  printf("\n");

  system("pause");

}

 

void permute_columns(float **pArray, int size, int column1, int column2)

{

  int j;

  float temp;

  for (j=0;j<size;j++)

  {

    temp=pArray[j][column1];

    pArray[j][column1]=pArray[j][column2];

    pArray[j][column2]=temp;

  }

}

 

void permute_lines(float **pArray, int size, int line1, int line2)

{

  int j;

  float temp;

  for (j=0;j<size;j++)

  {

    temp=pArray[line1][j];

    pArray[line1][j]=pArray[line2][j];

    pArray[line2][j]=temp;

  }

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(Λύση 12)      

#include <stdio.h>

#include <conio.h>

#include <string.h>

#include <stdlib.h>

#include <assert.h>

 

char **alloc_2_char(int size1, int size2);

void free_2_char(char **deikt, int size1);

void separate(char **pall, char **pnm, char **psr);

void sort(char **pnm, char **psr, char **pnm_new, char **psr_new);

 

void main()

{

  char **all,**nm,**nm_new,**sr,**sr_new;

  int i,j;

 

  all=alloc_2_char(2,41);

  nm=alloc_2_char(2,16);

  nm_new=alloc_2_char(2,16);

  sr=alloc_2_char(2,26);

  sr_new=alloc_2_char(2,26);

 

  printf("Give first name:  ");

  gets(all[0]);

  printf("\nGive second name:  ");

  gets(all[1]);

 

  separate(all,nm,sr);

  for (i=0;i<2;i++)  printf("\nnm[%d]=%s\tsr[%d]=%s",i,nm[i],i,sr[i]);

  sort(nm,sr,nm_new,sr_new);

  for (i=0;i<2;i++)  printf("\nnm_new[%d]=%s\tsr_new[%d]=%s",i,nm_new[i],i,sr_new[i]);

 

  free_2_char(sr_new,2);

  free_2_char(sr,2);

  free_2_char(nm_new,2);

  free_2_char(nm,2);

  free_2_char(all,2);

 

  getch();

}

 

char **alloc_2_char(int size1, int size2) {

  int i;

  char **deikt;

  deikt=(char **)malloc(size1*sizeof(char *)); assert(deikt!=NULL);

  for (i=0;i<size1;i++) {

    deikt[i]=(char *)malloc(size2*sizeof(char));

    assert(deikt[i]!=NULL);

  }

  return(deikt);

}

 

void free_2_char(char **deikt, int size1)

{

  int i;

  for (i=(size1-1);i>=0;i--) free(deikt[i]);

  free(deikt);

}

 

void separate(char **pall, char **pnm, char **psr)

{

  int i,j;

 

 

  for (i=0;i<2;i++)

  {

    j=0;

    while (pall[i][j]!=' ')

    {

      pnm[i][j]=pall[i][j];

      j++;

    }

    pnm[i][j]='\0';

 

    j=0;

    do

    {

      psr[i][j]=pall[i][strlen(pnm[i])+j];

      j++;

    } while (pall[i][j]!='\0');

  }

}

 

void sort(char **pnm, char **psr, char **pnm_new, char **psr_new)

{

  int i,j,mikos,count=0;

  mikos=(strlen(psr[0])<strlen(psr[1]))?strlen(psr[0]):strlen(psr[1]);

  i=0;

  do

  {

    if (psr[0][i]<psr[1][i]) count++;

    i++;

  } while ((i<mikos) && (!count));

  if ((count) || (strlen(psr[0])>strlen(psr[1])))

  {

    strcpy(psr_new[0],psr[1]);

    strcpy(psr_new[1],psr[0]);

    strcpy(pnm_new[0],pnm[1]);

    strcpy(pnm_new[1],pnm[0]);

  }

  else for (i=0;i<2;i++)

  {

    strcpy(psr_new[i],psr[i]);

    strcpy(pnm_new[i],pnm[i]);

  }

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(Λύση 13)      

#include <stdio.h>

#include <assert.h>

struct timeT

{

  int hour;

  int min;

  int sec;

};

void scanTime(timeT *t);

void printTime(timeT *t);

void TimeInSec(timeT *t);

timeT SecInTime(int sec);

void  main()

{

  int sec;

  struct timeT tme;

  FILE *fin1;

 

  scanTime(&tme);

 

  fin1=fopen("file1.dat","r");  assert(fin1!=NULL);

  fscanf( fin1,"%d",&tme.hour );

  fscanf( fin1,"%d",&tme.min );

  fscanf( fin1,"%d",&tme.sec );

  fclose( fin1 );

 

  printTime(&tme);

  TimeInSec(&tme);

 

  printf( "\n\n\nGive number of seconds to be transformed:" );    scanf( "%d",&sec );

 

  tme=SecInTime(sec);

  printf( "\n%d seconds are transformed to:",sec );

  printTime(&tme);

}  //end of main

void scanTime(timeT *t)

{

  FILE *f1;

  f1=fopen("file1.dat","w");  assert(f1!=NULL);

  printf( "\nGive hours:" );    scanf( "%d",&t->hour );

  fprintf( f1,"\n%d  ",t->hour );

  printf( "\nGive minutes:" );    scanf( "%d",&t->min );

  fprintf( f1,"%d  ",t->min );

  printf( "\nGive seconds:" );    scanf( "%d",&t->sec );

  fprintf( f1,"%d  ",t->sec );

  fclose( f1 );

}  //end of scanTime

void printTime(timeT *t)

{

  printf( "\nTime is:\t" );

  printf( "%d:%d:%d\n",t->hour, t->min, t->sec );

}  //end of printTime

void TimeInSec(timeT *t)

{

  int x;

  x=((t->hour)*3600)+ ((t->min)*60)+ (t->hour);

  printf( "\nTime in seconds is:\t%d",x );

}  //end of TimeInSec

timeT SecInTime(int sec)

{

  timeT t;

  t.hour=sec/3600;

  t.min=(sec%3600)/60;

  t.sec=(sec%3600)%60;

  return(t);

}  //end of SecInTime;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(Λύση 14)      

O1=(int ***)malloc(3*sizeof(int**)); assert(O1!=NULL);

for (i=0; i<3; i++)

{

O1[i]=(int **)malloc(2*sizeof(int*));

assert(O1[i]!=NULL);

for (j=0; j<2; j++)

{

O1[i][j]=(int *)malloc(3*sizeof(int));

assert(O1[i][j]!=NULL);

}

}

 

for (i=2; i>=0; i--)

for (j=1; j>=0; j--) free( O1[i][j] );

for (i=2; i>=0; i--) free( O1[i] );

free( O1 );

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(Λύση 15)      

#include <stdio.h>

#include <conio.h>

#include <assert.h>

 

#define N 3

 

void give_digits(int x, int *arr);

int get_digits(int *arr);

int transform(int x);

void swap_digits(int *arr);

 

void main()

{

    int x,y,i=0;

    FILE *f1,*f2;

    f1=fopen("x_file.txt","r"); assert(f1!=NULL);

    f2=fopen("y_file.txt","w"); assert(f2!=NULL);

    for (i=0;i<N;i++)

   {

        fscanf(f1,"%d",&x);

        fprintf(f2,"%d\n",transform(x));

    }

    fclose(f2);

    fclose(f1);

}

 

void give_digits(int x, int *arr)

{

    int y;

    arr[3]=x/1000;

    y=x%1000;

    arr[2]=y/100;

    y=y%100;

    arr[1]=y/10;

    arr[0]=y%10;

}

 

int get_digits(int *arr)

{

    return(arr[0]+arr[1]*10+arr[2]*100+arr[3]*1000);

}

 

int transform(int x)

{

    int y,arr_x[4],arr_y[4],i,temp;

    give_digits(x,arr_x);

    for (i=0;i<4;i++) arr_y[i]=(arr_x[i]+7)%10;

    swap_digits(arr_y);

    return(get_digits(arr_y));

}

 

void swap_digits(int *arr)

{

    int temp;

    temp=arr[0];

    arr[0]=arr[2];

    arr[2]=temp;

    temp=arr[3];

    arr[3]=arr[1];

    arr[1]=temp;

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(Λύση 16)      

#include <stdio.h>

void main()

{

  FILE *f1;

  char ch,string[81];

  int count=0;    // character counter

  f1=fopen("file1.dat","r");

  while ((ch=getc(f1))!=EOF)    // Read characters to EOF

  {

    if (ch=='b') count++;

  }

  fclose( f1 );

  printf( "Number of 'b' appearances = %d\n",count );

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(Λύση 17)      

#include <stdio.h>

#include <conio.h>

 

struct paral

{

  float a,b;

};

 

void readparal(paral *c);

void printparal(paral *c);

float paralarea(paral *c);

 

void main()

{

  struct paral pr;

  float area;

  readparal(&pr);

  printparal(&pr);

  area=paralarea(&pr);

  printf( "\n\t\tparal area = %f\n",area );

getch();

}

 

void readparal(paral *c)

{

  printf( "\nGive side a:  " );

  scanf( "%f",&(c->a) );

  printf( "\nGive side b:  " );

  scanf( "%f",&(c->b) );

}

void printparal(paral *c)

{

  printf( "\nside a:%f",c->a );

  printf( "\nside b:%f",c->b );

}

float paralarea(paral *c)

{

  return((c->a)*(c->b));

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(Λύση 18)      

#include <stdio.h>

#include <conio.h>

#include <string.h>

#include <assert.h>

#define N 3

 

typedef struct {

  char type[30];

  char plates[30];

  int year;

} struct_type;

 

void main() {

  struct_type car[N];

  FILE *f1;

  int i;

  f1=fopen( "2003_1_2_1.dat","r" );  assert( f1!=NULL );

  for (i=0;i<N;i++)

    fscanf( f1,"%s %s %d\n",car[i].type,car[i].plates,&car[i].year );

  fclose( f1 );

  f1=fopen( "2003_1_2_2.dat","w" );  assert( f1!=NULL );

  for (i=0;i<N;i++)

     fprintf( f1,"%s %s %d\n",car[i].type,car[i].plates,car[i].year );

  fclose( f1 );

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(Λύση 19)      

#include <stdio.h>

#include <conio.h>

#define rows 4

#define columns 3

 

int add(int *pin, int number) {

  int k, sum=0;

  for (k=0;k<number;k++) sum=sum+pin[k]*pin[k];

//equivalent expression:

//  for (k=0;k<number;k++) sum=sum+(*(pin+k))*(*(pin+k));

  return(sum);

}

 

void main() {

  int i,j;

  int a[rows][columns];

  for (i=0;i<rows;i++) for (j=0;j<columns;j++) {

    a[i][j]=i*j;  //for example

    printf( "a[%d][%d]=%d\n",i,j,a[i][j] );

  }

  printf( "Sum=%d\n",add(&a[0][0],rows*columns) );

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(Λύση 20)      

#include <stdlib.h>

#include<conio.h>

#include<stdio.h>

 

#define name "tape.txt"

 

void read_character(FILE *fp, char *s, int k )

{

  fseek(fp,k*sizeof(char),SEEK_SET);

  fread(s,sizeof(char),1,fp);

}

void save_character(FILE *fp, char *s, int k )

{

  fseek(fp,k*sizeof(char),SEEK_SET);

  fwrite(s,sizeof(char),1,fp);

}

void main()       {

  FILE *f1;

  char ch;

 

  f1=fopen(name,"wb");

  do      {

    ch=getche();

    fwrite(&ch,sizeof(char),1,f1);

  }        while (ch!='$');

  fclose(f1);