×

Welcome to TagMyCode

Please login or create account to add a snippet.
0
0
 
0
Language: C
Posted by: Damian Pytkowski
Added: Sep 23, 2016 12:01 AM
Views: 2125
Tags: calc steam
  1. #include<stdio.h>
  2. #include<windows.h>
  3. #include <time.h>
  4.  
  5. int Pow(int TWO,int M)
  6. {
  7.                 int Product=1,i;
  8.                 for(i=0;i<M;i++)
  9.                 {
  10.                 Product=Product * TWO;}
  11.  
  12.                 return Product;
  13.  
  14. }
  15. void insertSort(int a[], int length)
  16. {
  17.     int i, j, value;
  18.  
  19.     for (i = 1; i < length; ++i) {
  20.         value = a[i];
  21.         for (j = i - 1; j >= 0 && a[j] > value; --j)
  22.             a[j + 1] = a[j];  
  23.         a[j + 1] = value;
  24.     }
  25. }
  26.  int loga2(int x )
  27. {
  28.   int ans = 0 ;
  29.   while( x>>=1 ) ans++;
  30.   return ans ;
  31. }
  32. int enterData(int dest[])
  33. {
  34.     FILE *fr;
  35.     int i=0;
  36.     if((fr=fopen("wartosci.txt","r"))==NULL)printf("Blad odczytu.");
  37.     while(!feof(fr)){
  38.          fscanf(fr,"%d ",&dest[i]);
  39.         i++;
  40.     }
  41.         fclose(fr);
  42.         return i;
  43. }
  44. int sumuj(int arr[],int N)
  45. {
  46.         int i,suma=0;
  47.         for(i=0;i<N;i++)
  48.         {
  49.                 suma+=arr[i];
  50.         }
  51.         return suma;
  52. }
  53.  
  54. void usun(int arr[], int arrCls[],int N)
  55. {
  56.         FILE *fw;
  57.         int i,j=0;
  58.         if((fw=fopen("wartosci.txt","w"))==NULL)printf("Blad zapisu.");
  59.        
  60.         for(i=0;i<N;i++){
  61.                
  62.                 if(arr[i]==arrCls[j])
  63.                         j++;
  64.                 else   
  65.                         fprintf(fw,"%d ",arr[i]);              
  66.         }
  67.         fclose(fw);
  68. }
  69. void wyswDop(int arr[],int arrCls[],int N)
  70. {
  71.         int i,j=0;
  72.         for(i=0;i<N;i++){
  73.                
  74.                 if(arr[i]==arrCls[j])
  75.                         j++;
  76.                 else   
  77.                         printf("%d ",arr[i]);          
  78.         }      
  79. }
  80.  
  81. void mieszaj(int arr[], int N)
  82. {
  83.         int n=N/2;
  84.         int i,los,los2,zast;
  85.         srand(time(NULL));
  86.         for(i=0;i<N;i++)
  87.         {
  88.                 los=rand()%N;
  89.                 los2=rand()%N;
  90.                 zast=arr[los];
  91.                 arr[los]=arr[los2];
  92.                 arr[los2]=zast;
  93.         }
  94. }
  95. void wezPierwsze(int arr[],int arrDest[],int N1)
  96. {
  97.         int i;
  98.         for(i=0;i<N1;i++)
  99.                 arrDest[i]=arr[i];
  100. }
  101.  
  102.  
  103. int main()
  104. {
  105.         int i,j,N,nZ,k,suma=0,cena,min,n,m,suma1,p,n1,stab;
  106.         float procent;
  107.         int arr[50],wynik[24],tab2[50],mniejsza[24];
  108.         int *wskMn,*wskArr, *wsk;
  109.         char c;
  110.        
  111.         while(1){
  112.                 wskArr=arr;
  113.                 wskMn=mniejsza;
  114.                 wsk=arr;
  115.                 n=0;
  116.                 procent=0;
  117.                 printf("*Teraz mozesz edytowac dane.\n");
  118.                 getch();
  119.                 N=enterData(wskArr);
  120.                 nZ=N;
  121.                
  122.                 if(N>23)
  123.                 {
  124.                         mieszaj(wskArr,N);
  125.                         wezPierwsze(wskArr,wskMn,23);
  126.                         insertSort(wskArr,N);
  127.                         insertSort(wskMn,23);
  128.                         wskArr=wskMn;
  129.                         stab=sumuj(wskArr,23);
  130.                         N=23;
  131.                 }
  132.                 else
  133.                 {
  134.                         insertSort(wskArr,N);
  135.                         stab=sumuj(wskArr,N);
  136.                 }
  137.                 Sleep(100);
  138.                 min=5000;
  139.                 printf("Wczytano %d przedmiotow o wartosci %d.\n",N,stab);
  140.                 printf("Podaj cene: ");
  141.                 scanf("%d",&cena);
  142.                
  143.                 for(j=Pow(2,N)-1;j>0;j--){
  144.                         //procent=100-(((float)j)/((float)Pow(2,N)-1))*100;
  145.                         //printf("%.0f%%%\r",procent);
  146.                         k=j;
  147.                         p=0;
  148.                         while(k>0){
  149.                                 if(k%2==1) {
  150.                                         suma+=wskArr[p];
  151.                                         tab2[n]=wskArr[p];
  152.                                         n++;
  153.                                         }
  154.                                 k=k/2;
  155.                                 p++;
  156.                         }
  157.                         if(suma>=cena){
  158.                                 if(suma<min){
  159.                                         for(m=0;m<n;m++){
  160.                                                         wynik[m]=tab2[m];
  161.                                                         suma1=suma;
  162.                                                 }
  163.                                                 min=suma;
  164.                                                 n1=n;  
  165.                                         }
  166.                                 }
  167.                         suma=0;
  168.                         n=0;
  169.                         if(suma1 - cena <= 1) break;
  170.                 }
  171.                 printf("\n");
  172.                
  173.                 printf("A : ");
  174.                 wynik[n1]=0;
  175.                 for(i=0;i<n1;i++)
  176.                         printf("%d ",wynik[i]);
  177.                 printf("\t->\t%d\n",suma1);
  178.                
  179.                
  180.                 wskArr=wsk;
  181.                 N=nZ;
  182.                 printf("\n");
  183.                 printf("Czy usunac %d wartosci?\n",n1);fflush(stdin);
  184.                 c=getchar();
  185.                 if(c!='n'){
  186.                         usun(wskArr,wynik,N);
  187.                         printf("*Usuwanie zakonczone.\n");
  188.                         Sleep(1000);
  189.                         system("cls");
  190.                 }
  191.                 else{
  192.                         system("cls");
  193.                         Sleep(100);
  194.                 }
  195.         }
  196. }