×

Welcome to TagMyCode

Please login or create account to add a snippet.
0
0
 
0
Language: C
Posted by: Damian Pytkowski
Added: Sep 12, 2016 10:58 AM
Modified: Sep 12, 2016 11:33 AM
Views: 8
Tags: keys calc steam
v1.6
-poprawione usuwanie
-sortowanie
-wyswietlanie dopelnienia
  1. #include<stdio.h>
  2. #include<windows.h>
  3.  
  4. int Pow(int TWO,int M)
  5. {
  6.                 int Product=1,i;
  7.                 for(i=0;i<M;i++)
  8.                 {
  9.                 Product=Product * TWO;}
  10.  
  11.                 return Product;
  12.  
  13. }
  14. void insertSort(int a[], int length)
  15. {
  16.     int i, j, value;
  17.  
  18.     for (i = 1; i < length; ++i) {
  19.         value = a[i];
  20.         for (j = i - 1; j >= 0 && a[j] > value; --j)
  21.             a[j + 1] = a[j];  
  22.         a[j + 1] = value;
  23.     }
  24. }
  25.  int loga2(int x )
  26. {
  27.   int ans = 0 ;
  28.   while( x>>=1 ) ans++;
  29.   return ans ;
  30. }
  31. int enterData(int dest[])
  32. {
  33.     FILE *fr;
  34.     int i=0;
  35.     if((fr=fopen("wartosci.txt","r"))==NULL)printf("Blad odczytu.");
  36.     while(!feof(fr)){
  37.          fscanf(fr,"%d\n",&dest[i]);
  38.         i++;
  39.     }
  40.         fclose(fr);
  41.         return i;
  42. }
  43. int sumuj(int arr[],int N)
  44. {
  45.         int i,suma=0;
  46.         for(i=0;i<N;i++)
  47.         {
  48.                 suma+=arr[i];
  49.         }
  50.         return suma;
  51. }
  52.  
  53. void usun(int arr[], int arrCls[],int N)
  54. {
  55.         FILE *fw;
  56.         int i,j=0;
  57.         if((fw=fopen("wartosci.txt","w"))==NULL)printf("Blad zapisu.");
  58.        
  59.         for(i=0;i<N;i++){
  60.                
  61.                 if(arr[i]==arrCls[j])
  62.                         j++;
  63.                 else   
  64.                         fprintf(fw,"%d\n",arr[i]);             
  65.         }
  66.         fclose(fw);
  67. }
  68. void wyswDop(int arr[],int arrCls[],int N)
  69. {
  70.         int i,j=0;
  71.         for(i=0;i<N;i++){
  72.                
  73.                 if(arr[i]==arrCls[j])
  74.                         j++;
  75.                 else   
  76.                         printf("%d ",arr[i]);          
  77.         }      
  78. }
  79.  
  80. int main()
  81. {
  82.         int i,j,N,k,suma=0,cena,min,n,m,suma1,p,n1,stab;
  83.         int arr[50],tab[50],tab2[50];
  84.         char c;
  85.         while(1){
  86.                 n=0;
  87.                 printf("*Teraz mozesz edytowac plik.\n");
  88.                 getch();
  89.                 N=enterData(arr);
  90.                 insertSort(arr,N);
  91.                 stab=sumuj(arr,N);
  92.                 Sleep(100);
  93.                 min=5000;
  94.                 printf("Wczytano %d przedmiotow o wartosci %d.\n",N,stab);
  95.                 printf("Podaj cene: ");
  96.                 scanf("%d",&cena);
  97.                
  98.                 for(j=Pow(2,N)-1;j>0;j--){
  99.                        
  100.                         k=j;
  101.                         p=0;
  102.                         while(k>0){
  103.                                 if(k%2==1) {
  104.                                         suma+=arr[p];
  105.                                         tab2[n]=arr[p];
  106.                                         n++;
  107.                                         }
  108.                                 k=k/2;
  109.                                 p++;
  110.                         }
  111.                         if(suma>=cena){
  112.                                 if(suma<min){
  113.                                         for(m=0;m<n;m++){
  114.                                                 tab[m]=tab2[m];
  115.                                                 suma1=suma;
  116.                                                 min=suma;
  117.                                                 }
  118.                                                 n1=n;  
  119.                                         }
  120.                                 }
  121.                         suma=0;
  122.                         n=0;
  123.                 }
  124.                 printf("\n");
  125.                 /*wyswielanie wyniku*/
  126.                 printf("A : ");
  127.                 tab[n1]=0;
  128.                 for(i=0;i<n1;i++)
  129.                         printf("%d ",tab[i]);
  130.                 printf("\t->\t%d\n",suma1);
  131.                 //
  132.                
  133.                 /*wyswietlanie dopelnienia*/
  134.                 printf("A': ");
  135.                 wyswDop(arr,tab,N);
  136.                 printf("\n");
  137.                 //
  138.                
  139.                 printf("\n");
  140.                 printf("Czy usunac %d wartosci?\n",n1);fflush(stdin);
  141.                 c=getchar();
  142.                 if(c!='n'){
  143.                         usun(arr,tab,N);
  144.                         printf("*Usuwanie zakonczone.\n");
  145.                         Sleep(1000);
  146.                         system("cls");
  147.                         printf("Aktualna wartosc %d przedmiotow: %d\n",N-n1,stab-suma1);
  148.                 }
  149.                 else{
  150.                         system("cls");
  151.                         Sleep(100);
  152.                         printf("Aktualna wartosc %d przedmiotow: %d\n",N,stab);
  153.                        
  154.                 }
  155.         }
  156. }