Forum grupy T2 I Roku EiT


#1 2008-01-14 19:31:29

Mateusz Buczkowski

UÂżytkownik

1965860
Zarejestrowany: 2007-10-04
Posty: 23
Punktów :   

Program z zaliczenia

Rozwiązanie mam nadzieję, że jest dobre...
Było parę wersji dotyczących tego, co ten program ma w zasadzie robić, więc napiszę lepiej co robi ten, żeby wątpliwości nie było :]
Szuka takiego ciągu o dowolnej długości w tablicy nSize elementowej, dla którego suma wyrazów jest największa...


#include <iostream>
#include <conio.h>
#include <ctime>

using namespace std;

const unsigned int MAX = 100;  // maksymalny rozmiar tablicy

void vInsert(int[], int, int, int);
void vShowTable(int[], int);
void vSearch(int[], int);

int main()
{
    int aTable[MAX] = {0};
    int nSize;
   
    do {
        cout << "Podaj rozmiar tablicy [1 - " << MAX <<  "]: ";
        cin >> nSize;
    } while ((nSize < 1) || (nSize > MAX));
   
    vInsert(aTable, nSize, -20, 20);           // wypełnienie tablicy losowymi liczbami od -20 do 20
    vShowTable(aTable, nSize);
    vSearch(aTable, nSize);                    // wyszukanie ciagu o najwiekszej sumie elementow   
   
    getch();
    return 0;
}

void vInsert(int aTable[], int nSize, int nMin, int nMax)
{
     srand(time(NULL));
     for (int i = 0; i < nSize; ++i)
         aTable[i] = (rand() % (nMax - nMin + 1)) + nMin;
}

void vShowTable(int aTable[], int nSize)
{
     for (int i = 0; i < nSize; ++i)
         cout << aTable[i] << "\t";
     cout << endl << endl;
}

void vSearch(int aTable[], int nSize)
{
     int nSuma = 0;
     int nSumaMax = nSuma, nIndexStart = 0, nIndexStop = 0;
     for (int i = 0; i < nSize; ++i)
     {
         for (int j = i; j < nSize; ++j)
         {
             nSuma += aTable[j];
             if (nSuma > nSumaMax)
             {
                nSumaMax = nSuma;
                nIndexStart = i;
                nIndexStop = j;
             }
         }
         nSuma ^= nSuma;
     }
     cout << "Suma: " << nSumaMax << endl;
     cout << "Start: " << nIndexStart << ", stop: " << nIndexStop;
}

Offline

 

#2 2008-01-15 21:11:35

Mateusz_Frąckowiak

UÂżytkownik

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

Re: Program z zaliczenia

Z tego co ja słyszałem to program miał wyszukiwać trzech kolejnych liczb w tablicy których suma jest najwieksza, oraz miał wypisać indeksy tych elementów. Jeżeli zdażyło by sie ze w tablicy jest pare trójek o jednakowej <najwiekszej> sumie to wypisać je wszystkie. poniżej moje rozwiązanie:

Kod:

#include <iostream>
using namespace std;

/*******funkcja obliczająca sume trzech kolejnych elementów tablicy, od indeksu (miejsce) *******/
int suma (int tab[], int miejsce)
{
int a=0;
for (int i=0;i<3;i++) a+=tab[miejsce+i];
return(a);
}



int main()
{
int il,tab[999],najw,adr[999],wsk=0;  
cout << "ile liczb? ";
cin  >> il;
for (int i=0;i<il;i++)                               //w petli wprowadzamy dane
    {cout<< "podaj liczbe nr "<<i+1<<": ";
    cin >>tab[i];
    }
najw=suma(tab,0);                                 //zmienna najw bedzie miec wartosc najwiekszej sumy 3 kolejnych
adr[0]=0;                                              // elementów. Na początek podkładam pod nią sumę pierwszych 3el.
for (int k=1; k<(il-2); k++)                    //tablica adr bedzie przechowywac indeksy pierwszych el. najwiekszych trójek
        {                                            //w tej petli sprawdzam każdą kolejną trójkę (bez pierwszej) czy jej suma nie jest 
        int pom=suma(tab,k);             // wieksza. Pom to zmienna przechowująca sume trzech sprawdzanych elem.
        if (pom>najw)                         // jezeli jest to:
                {
                najw=pom;                    //zmiennej najw przypożadkowuje teraz tą wiekszą wartość 
                adr[0]=k;                      //tablice znakow zaczynam zapelniac od początku. otrzymuje wartosc indeksu pierw
                wsk=0;                         //elementu. wsk to zmienna która pokazuje w którym miejscu adr jestem
                }
        else
                {
                if (pom==najw)             //jeżeli suma jest równa najwiekszej
                        {
                        wsk++;                //przechodze na kolejne miejsce w adr
                        adr[wsk]=k;         //wpisuje kolejny indeks pierwszego elementu
                        }
                }

        }
cout <<"najwieksza suma to: "<<najw;            //po przejsciu powyższej pętli najw ma oczywiście wartość najwiekszej 
cout <<"\nindeksy najwiekszych sum: \n";      //sumy.
for (int u=0;u<=wsk;u++)                             // w tej petli wypisywane sa indeksy elementow. adr[u] to indeks
        {                                                        //pierwszego el z danej trójki
        cout << adr[u]<<",  "<<adr[u]+1<<",  "<<adr[u]+2<<"\n";
        }
system("pause");
}

Ostatnio edytowany przez Mateusz_Frąckowiak (2008-01-15 21:49:30)


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

Offline

 

#3 2008-01-17 12:42:57

mateusz

Nowy uÂżytkownik

Zarejestrowany: 2008-01-06
Posty: 6
Punktów :   

Re: Program z zaliczenia

moze jakis kod na ten syf z naszego zaliczenia? ;p

Offline

 

#4 2008-01-17 21:40:00

Frodo (A. Gorgolewski)

UÂżytkownik

2009212
Zarejestrowany: 2007-10-04
Posty: 56
Punktów :   

Re: Program z zaliczenia

poniżej zamieszczam dwa programiki, które zrobiłem w tym tyg (program zaliczeniowy z poniedziałku i nasz zaliczeniowy). nie gwarantuje, że nie ma tam błędów (w razie czego to mam jeszcze drugą wersję naszego programu zaliczeniowego wyświetlający w inny sposób te liczby ale działającego na identycznej zasadzie)
na ftp zamieściłem wszystkie swoje programy



to jest moje sumowanie:
#include<iostream>
#include<conio.h>
using namespace std;
main()
{
    int x=101, temp, temp1, temp2, suma=0, k, l=0, jaja=0;
    while(x>100)
    {
        if(jaja>=2)cout<<"jaja sobie robisz, czy do 100 liczyc nie umiesz?\n";
        cout<<"podaj rozmiar tablicy nie wiekszy niz 100: ";
        cin>>x;
        jaja++;
    }
    int tab[x];
    for(int i=0;i<x;i++)
    {
        cout<<"wprowadz element tablicy nr "<<i<<" = ";
        cin>>tab[i];               
    }
    temp=tab[0];                            //temp jest początkowo równy pierwszemu elementowi tablicy i przechowuje największą wart
    temp1=0;                                // zakres od
    temp2=0;                                // zakres do
   
   
    for(int j=1; j<=x; j++)                 // j- ilość liczb, które mam sumować
    {
        for(int i=0; i<x; i++)              // i- pozycja sumowanej liczby (tutaj przesuwanie o 1 pozycję w tablicy w prawo)
        {
            k=i;                            // k - licznik zastępujący i, żeby po wykonaniu wewnętrznej pętli spowrotem powrócić do wart generowanej przez zewnętrzną pętlę
            for(i, l=0; i<j; i++, l++)      // i - l- liczniki sumowań liczb (i nie większe niż j)
            {
                suma+=tab[i];
                if(temp<suma)
                {
                temp=suma;
                temp1=j-1-l;
                temp2=j-1;
                }
            }
            i=k;
            suma=0;
        }   
    suma=0;
    }
   
   
    cout<<endl<<"najwieksza suma = "<<temp<<" znajdujaca sie w komorkach tablicy od nr "<<temp1<<" do "<<temp2<<endl;
getch();   
}






a to jest nasze zaliczenie:
#include<iostream.h>
#include<conio.h>
#include<math.h>
using namespace std;

void binarna(int tab[], int przesile);


/******************************************************************************/
int main()
{
    int tab[4], przesile;
    for(int i=0;i<4;i++)
    {
        cout<<"wprowadz element tablicy nr "<<i<<" = ";
        cin>>tab[i];
    }
    cout<<endl<<"wprowadz wartosc przesuniecia bitowego: ";
    cin>>przesile;
    binarna(tab, przesile);
   
getch();
return 0;
}
/******************************************************************************/


/******************************************************************************/
void binarna(int tab[], int przesile)
{
    int temp[128], temp1[128], a=1, temp2[4]={0,0,0,0};
/*1**************************************/   
    cout<<endl<<"Wyswietlenie postaci dziesietnej czterech podanych liczb:"<<endl;
    for(int i=0;i<4;i++)
    {
        cout<<"element tablicy nr "<<i<<" = "<<tab[i]<<endl;               
    }
/*2**************************************/   
   
    for(int j=0; j<=3; j++)
    {
        for(int i=(j*32); i<=32*(j+1); i++)
        {
            temp[i]=tab[j]%2;
            tab[j]/=2;
        }
       
    }     
       
    cout<<endl<<"Wyswietlenie postaci binarnej czterech podanych liczb w tablicy 128 bitowej:"<<endl;     
    for(int i=127;i>=0;i--)
    {   
        cout<<temp[i];
        if(i==32) cout<<" ";
        if(i==64) cout<<" ";
        if(i==96) cout<<" ";             
    }
    cout<<endl;
/*3**************************************/   
    for(int i=127; i>=przesile; i--)
    {   
        temp1[i-przesile]=temp[i];
    }
    for(int i=0; i<=przesile; i++)
    {
        temp1[128-przesile+i]=temp[i];
    }
   
     cout<<endl<<"Wyswietlenie po przesunieciu cyklicznym w postaci binarnej czterech podanych liczb w tablicy 128 bitowej:"<<endl;     
    for(int i=127;i>=0;i--)
    {   
        cout<<temp1[i];
        if(i==32) cout<<" ";
        if(i==64) cout<<" ";
        if(i==96) cout<<" ";             
    }
    cout<<endl;
/*4**************************************/   
    for(int j=0; j<=3; j++)
    {
        for(int i=(j*32); i<=32*(j+1); i++)
        {   
            if(temp1[i]==1)
            {
                for(int k=0; k<=i-(32*j); k++) 
                {
                 a*=2;
                 if(k==0)a=1;
                }
                temp2[j]+=a;
                a=1;
            }
           
        }
       
    }
   
    cout<<endl<<"Wyswietlenie po przesunieciu cyklicznym w postaci dziesietnej czterech podanych liczb:"<<endl;
    for(int i=0;i<4;i++)
    {
        cout<<"element tablicy nr "<<i<<" = "<<temp2[i]<<endl;               
    }   
}
/******************************************************************************/

Ostatnio edytowany przez Frodo (A. Gorgolewski) (2008-01-17 21:52:05)


http://img.userbars.pl/99/19602.jpg
http://img.userbars.pl/116/23045.png
http://img.userbars.pl/22/4245.png

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.plklej do luster