Forum grupy T2 I Roku EiT


#1 2007-11-29 17:39:13

Mateusz_Frąckowiak

UÂżytkownik

Zarejestrowany: 2007-10-04
Posty: 52
Punktów :   

laborka 28.11.07

wersja nie testowana - wszelkie wyszukiwanie błędów mile widziane

Kod:

#include <iostream>

using namespace std;

/*********************************** Zliczanie jedynek *********************/
int zliczanie(int a)
{
int b,c,d,e,f;
int mask1=1431655765, mask2=858993459, mask3=252645135,mask4=16711935,mask5=65535;
b=(a & mask1)+((a & ~(mask1))>>1);
c=(b & mask2)+((b & ~(mask2))>>2);
d=(c & mask3)+((c & ~(mask3))>>4);
e=(d & mask4)+((d & ~(mask4))>>8);
f=(e & mask5)+((e & ~(mask5))>>16);  
return (f); 
}

/**************************************************************************/

/************************** Sortowanie ze przez wstawianie ****************/
void sortowanie(int tab[])
{
int il[10];
for (int i=0; i<10; i++)
    {
    il[i]=zliczanie(tab[i]); 
    }
for (int i=1; i<10; i++)
    {
    int q,w,k=1;
    q=il[i];
    w=tab[i];
    while (q<il[i-k]&&(i-k+1!=0))
          {
          il[i-k+1]=il[i-k];
          tab[i-k+1]=tab[i-k]; 
          k++;
          }  
    il[i-k+1]=q;
    tab[i-k+1]=w;   
    }  
for (int i=0;i<10;i++)              // drukowanie wyników
    {
    cout << tab[i] << "   ";     
    }        
}

/****************************************************************************/


int main ()
{
int tab[10];
for (int i=0;i<10;i++)
    {
    cout << "podaj liczbę nr " << i+1 << ": ";
    cin >> tab[i];
    } 
sortowanie(tab);
system ("pause");
}

>> http://img80.imageshack.us/img80/5980/palylm4.jpg  <<

Offline

 

#2 2007-11-29 20:43:16

Kuba Sołtysiak

Administrator

872093
Call me!
Zarejestrowany: 2007-10-04
Posty: 34

Re: laborka 28.11.07

Wersja testowana 100% sprawna no ale kuleje na wydajności

Kod:

#include <iostream>
using namespace std;

int liczjed(int);
int liczjed(int li){
int mask1,mask2;
   mask1= li & 85;
   mask2= li & 170;
   li= mask1 + (mask2>>1);
   mask1= li & 51;
   mask2= li & 204;
   li= mask1 + (mask2>>2);
   mask1= li & 15;
   mask2= li & 240;
   li= mask1 + (mask2>>4);
   
   mask1= li & 255;
   mask2= li & 65280;
   li= mask1 + (mask2>>8); 
   mask1= li & 65535;
   mask2= li & 0xFFFF0000;
   li= mask1 + (mask2>>16);
   return li;
}

int Tab[10];

void sort();
void sort(){
    int i,j,p,zm=0;
    for(i=0;i<10-1;i++)
        {
                p = i;                    
                for(j=i+1;j<10;j++)
                {
                                 if(liczjed(Tab[j])<liczjed(Tab[i]))
                                 {p=j;
                                 zm=Tab[p];
                                 Tab[p]=Tab[i];
                                 Tab[i]=zm;}
                }
        }    
}

int main()
{
    int i=0;
    cout << "Podaj 10 liczb calkowitych:\n";
    for(i=0;i<10;i++)
    {cin >> Tab[i];
    cout << endl;}
    for(i=0;i<10;i++)
    {cout << Tab[i] <<", ";}
    cout << endl;
    sort();
         for(i=0;i<10;i++)
    {cout << Tab[i] <<", ";}
    cout << endl;
    system("PAUSE");
}

"Tylko dwie rzeczy są nieskończone: wszechświat oraz ludzka głupota, choć nie jestem pewien co do tej pierwszej." /A.Einstein

Offline

 

Stopka forum

RSS
Powered by PunBB 1.2.23
© Copyright 2002–2008 PunBB
Polityka cookies - Wersja Lo-Fi


Darmowe Forum | Ciekawe Fora | Darmowe Fora
GotLink.plwodomierze wrocław biuro rachunkowe www.otokot.pl