Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <time.h>
- #define ARRAYSIZE(arr) (sizeof(arr)/sizeof(arr[0]))
- int maxarr(int* marr, int n);
- void nullarr(int* marr, int n);
- void randomizearr(int* marr, int n, int num1, int num2, int seed);
- void outputarr(int* marr, int n);
- void invert(int* marr, int n);
- void savetofile(int* marr, int n, int nwarr);
- void readfromfile(int* marr, int n, int nwarr);
- void deletefromto(int* marr, int *n);
- void addfromto(int* marr, int n);
- void sortarr(int* marr, int n);
- void bsortarr(int* marr, int n);
- int main()
- {
- int sd=1;
- int m1[9]; int m2[7]; int m3[8]; int m4[7];
- randomizearr(m1,ARRAYSIZE(m1),14,20,sd); sd++;
- randomizearr(m2,ARRAYSIZE(m2),14,20,sd); sd++;
- randomizearr(m3,ARRAYSIZE(m3),14,2100,sd);
- outputarr(m1,ARRAYSIZE(m1));
- outputarr(m2,ARRAYSIZE(m2));
- outputarr(m3,ARRAYSIZE(m3));
- printf("\n Max. elements of m1,m2,m3: %d %d %d \n ",maxarr(m1,ARRAYSIZE(m1)),maxarr(m2,ARRAYSIZE(m2)),maxarr(m3,ARRAYSIZE(m3)));
- int m1s=ARRAYSIZE(m1),m2s=ARRAYSIZE(m2),m3s=ARRAYSIZE(m3);
- int x,y,f1,f2,f3;
- for(x=0;x<7;x++){
- m4[x]=x+14;
- }
- for(x=0;x<7;x++){
- f1=0;f2=0;f3=0;
- for(y=0;y<ARRAYSIZE(m1);y++){
- if (m1[y]==m4[x]) {
- f1=1;
- }
- }
- for(y=0;y<ARRAYSIZE(m2);y++){
- if (m2[y]==m4[x]) {
- f2=1;
- }
- }
- for(y=0;y<ARRAYSIZE(m3);y++){
- if (m3[y]==m4[x]) {
- f3=1;
- }
- }
- if (!(f1 && f2 && f3)) m4[x]=0;
- }
- printf("\n All arrays contain: ");
- for(x=0;x<7;x++) {
- if (m4[x]!=0) printf("%d ",m4[x]);
- }
- printf("\n");
- printf ("Input number and number of array: \n 1 - to make array full of NULL \n 2 - to reload array \n 3 - to find max. el. \n 4 - to output array \n 5 - to invert \n 6 - save to file \n 7 - read from file \n 8 - to add \n 9 - to delete \n 10 - to sort \n 11 - to better sort \n 0 - to exit\n ");
- int menup,nwarr; int* was; int* warr;
- do{
- printf(" \n ");
- scanf("%d",&menup); if (menup==0) break;
- scanf("%d",&nwarr);
- switch(nwarr){
- case 1: warr=m1; was=&m1s; break;
- case 2: warr=m2; was=&m2s; break;
- case 3: warr=m3; was=&m3s; break;
- }
- switch(menup){
- case 1: nullarr(warr,*was); break;
- case 2: randomizearr(warr,*was,14,20,sd); sd++; break;
- case 3: printf("\n Max. elements of your arr is %d \n ",maxarr(warr,*was)); break;
- case 4: outputarr(warr,*was); break;
- case 5: invert(warr,*was); break;
- case 6: savetofile(warr,*was,nwarr); break;
- case 7: readfromfile(warr,*was,nwarr); break;
- case 8: addfromto(warr, *was); break;
- case 9: deletefromto(warr, was); break;
- case 10: sortarr(warr,*was); break;
- case 11: bsortarr(warr,*was); break;
- }
- } while(1);
- printf("\n");
- return 0;
- }
- void outputarr(int* marr, int n){
- int i;
- for (i=0;i<n;i++){
- printf("%4d ",i);
- }
- printf("\n");
- for (i=0;i<n;i++){
- printf("%4d ",marr[i]);
- }
- printf("\n");printf("\n");
- }
- void nullarr(int* marr, int n){
- int i;
- for (i=0;i<n;i++){
- marr[i]=0;
- }
- }
- void randomizearr(int* marr, int n, int num1, int num2, int seed){
- int i;
- srand((unsigned)time(NULL)*seed);
- for (i=0;i<n;i++){
- marr[i]=rand()%(num2-num1+1)+num1;
- }
- }
- int maxarr(int* marr, int n){
- int i,maxnum;
- maxnum=0;
- for (i=1;i<n;i++){
- if(marr[maxnum] < marr[i]) maxnum=i;
- }
- return maxnum;
- }
- void invert(int* marr, int n){
- int i,buff,cn;
- for (i=2;i<=n/2;i+=2){
- cn=(n/2)*2-i+2;
- buff=marr[i-1];
- marr[i-1]=marr[cn-1];
- marr[cn-1]=buff;
- }
- }
- void savetofile(int* marr, int n, int nwarr){
- FILE *fp; char buff[10]; int l;
- sprintf(buff,"m%d.txt", nwarr);
- if ((fp = fopen(buff,"w"))==NULL) {
- printf("Error!\n");
- exit(1);
- }
- for(l=0;l<n;l++){
- sprintf(buff,"%d", marr[l]);
- fputs(buff,fp);
- fputc(' ',fp);
- }
- fclose(fp);
- }
- void readfromfile(int* marr, int n, int nwarr){
- FILE *fp; char buff[10]; int l;
- sprintf(buff,"m%d.txt", nwarr);
- if ((fp = fopen(buff,"r"))==NULL) {
- printf("Error!\n");
- exit(1);
- }
- char filstr[600],numb[600];
- fgets(filstr,sizeof(filstr),fp);
- int m=0,i=0,nm=1,sl;
- sl=strlen(filstr);
- for(l=0;l<sl-1;l++){
- if ((filstr[l]==' ') || (l==sl-1)) {
- numb[m]='\0';
- marr[i]=nm*atoi(numb);
- m=0; nm=1; numb[0]='\0'; i++;
- continue;
- }
- if (filstr[l]=='-') nm=-1;
- else {
- numb[m]=filstr[l]; m++;
- }
- }
- fclose(fp);
- outputarr(marr,n);
- }
- void deletefromto(int* marr, int* n){
- int i; int from; int to;
- printf("Input from and to: ");scanf("%d",&from);scanf("%d",&to);
- for (i=to+1;i<*n;i++){
- marr[i-from-2]=marr[i];
- }
- *n=*n-(to-from+1);
- }
- void addfromto(int* marr, int n){
- int i; int from; int to;
- printf("Add from and to: ");scanf("%d",&from);scanf("%d",&to);
- int* addnum;
- addnum=malloc((to-from+1)*sizeof(int));
- for (i=0;i<(to-from+1);i++) scanf("%d",&addnum[i]);
- for (i=to+1;i<n;i++){
- marr[i]=marr[i-from-2];
- }
- for (i=from;i<=to;i++){
- marr[i]=addnum[i-from];
- }
- free(addnum);
- }
- void sortarr(int* marr, int n){
- int n1=0,n2=0,i,j,buff;
- for (i=0;i<n-1;i++)
- for (j=0;j<n-1-i;j++){
- n1++;
- if (marr[j]>marr[j+1]){
- buff=marr[j];
- marr[j]=marr[j+1];
- marr[j+1]=buff;
- n2++;
- }
- }
- printf("\n Number of comparsions: %d",n1);
- printf("\n Number of conversions: %d",n2);
- printf("\n");
- }
- void bsortarr(int* marr, int n){
- int n1=0,n2=0,i,j,f1,buff;
- for (i=0;i<n-1;i++){
- f1=1;
- for (j=0+(i%2)*(n-i-1);(j<n-1-i)*((i%2)-1)||(j>=0)*(i%2);j+=((i+1)%2)-((i)%2)){
- n1++;
- if (marr[j]>marr[j+1]){
- buff=marr[j];
- marr[j]=marr[j+1];
- marr[j+1]=buff;
- n2++; f1=0;
- }
- }
- if (f1) break;
- }
- printf("\n Number of comparsions: %d",n1);
- printf("\n Number of conversions: %d",n2);
- printf("\n");
- }
Add Comment
Please, Sign In to add comment