Nowe posty

Pokaż wiadomości

Ta sekcja pozwala Ci zobaczyć wszystkie wiadomości wysłane przez tego użytkownika. Zwróć uwagę, że możesz widzieć tylko wiadomości wysłane w działach do których masz aktualnie dostęp.


Pokaż wątki -

Strony: [1] 2
1
C/C++ / przyspieszenie programu
« dnia: 2014-02-17, 12:58:00 »
Witam!
Nadal cwicze zadania z projektu Euler.
W tym momencie pojawilo mi sie w glowie pytanie jak przyspieszyc dzialanie takich kodow.

Np. napisalam kod dla zadania nr 14 - Longest Collatz sequence:

#include
#include
int iteration(int value);
int count_iteration(int value);
using namespace std;

int main(){
    int time1, time2;
    time1 = clock(); // za czas1 zostanie wstawiony czas w milisekundach od momentu wlaczenia programu

    const unsigned int NUMBER = 1000000;
    int n = 10 ;
    int lenght;

    lenght = count_iteration(n);
    cout << " DLUGOSC LANCUCHA = " << lenght << endl;

    int max = 0;
    int iteraction = 0;
    int count = 0;

  for (int i = 1; i < NUMBER; i++){
    //cout << "Current iteration : "<< i << endl;
    iteraction = count_iteration(i);
        if (iteraction > max){
            max = iteraction;
            count=i;
           
        }

    }
 
    cout << "SZUKANA LICZBA = " << count << " DLUGOSC LANCUCHA = " << max << endl;

    time2 = clock();
    time2 = time2 - time1;
    cout << "CZAS WYKONYWANIA PROGRAMU " << time2 << "ms "<< endl;
}


int count_iteration(int value){
    int chain = 1;

    while(value!=1){

        value = iteration(value);
        chain++;
    }

return chain;
}

int iteration(int value){
    if(value%2==0)
        return (value/2);
    else
        return (3*value+1);
}
Niestety taki kod wykonuje sie ekstremalnie dlugo...
Od czego powinnam rozpoczac nauke optymalizacji kodu?

2
C/C++ / mały problem z pętlą
« dnia: 2014-02-14, 17:18:16 »
Mam tablice z liczbami 6x6 i chciałabym znaleźć njwiększy iloczyn 3 liczb idąc tylko w stronę horyzontalną.
Np. mamy pierwszy wiersz liczb:
8, 2, 22, 97, 38, 15

Czyli szukam takich iloczynow: 8*2*22 ; 97*38*15, itd...
Nie moge poradzic sobie z pętlą, która również będzie szukała takich trójek liczb:
2*22*97; 22*97*38; itd;
wprowadziłam dodatkową pętlę do .. while, ale niestety nie otrzymalam zamierzonego efektu.
Czy mogłabym prosić o jakieś wskazówki?

Ooto moje wypociny:
int *grid[6][6];
    int tab[36] = {8, 2, 22, 97, 38, 15, 0, 40, 0, 75, 4, 5, 7, 78, 52, 12, 50, 77, 91, 8, 49, 49, 99, 40, 17, 81, 18, 57, 60, 87, 17, 40, 98, 43,    69, 48};

    int N = 6;
    for (int i = 0; i < 6; i++){
        for (int j = 0; j < 6; j++){
            grid[i][j] = &tab[i*N+j];
                        //cout << "T["<        }
    }
long int product = 1;
    long int final_product = 0;
    int counter = 0;
    int counter2 = 0;

    do{
    for (int i = 0; i < 6; i++){
        for (int j = counter2; j < 6; j++){
            product = product * (*grid[i][j]);
            cout << "P= " << product << endl;
            counter++;
            cout << "Licznik = " << counter << endl;
            if (counter%3 == 0){
                if(product > final_product){
                    final_product = product;
                }
                    product  = 1;
                    counter = 0;

            }
        }
            counter2++;
            cout << "COUNTER2 =" << counter2 << endl;
    }
}while (counter2==5);
    cout << "The biggest product = " << final_product;

3
C/C++ / konwersja
« dnia: 2014-02-12, 09:57:36 »
Hej!
Chciałabym dokonać konwersji string na int. Znalazlam nastepujacy sposob za pomoca biblioteki BOOST:
#include
#include

char * argv = "1234578";
    using boost::lexical_cast;
    using boost::bad_lexical_cast;

    std::vector args;

    while (*++argv)
    {
        try
        {
            args.push_back(lexical_cast(*argv));
        }
        catch(const bad_lexical_cast &)
        {
            args.push_back(0);
        }
    }
 cout << "SIZE = " << args.size() << endl;
    for (int i = 0; i < args.size(); i++){
        cout << args[i] << endl;
    }
}
Nie wiem dlaczego ale wyniki zostaja wyswietlane od drugiego elementu oraz rozmiar wektora również jest o 1 element zbyt mały.
Również zbytnio nie rozumiem warunku while(*++argv). Czy to oznacza: wykonuj tak długo aż napotkasz ostatni element?

4
Języki skryptowe / [Python] klasa reverse
« dnia: 2014-01-03, 12:26:07 »
Rozpoczynam nauke Pythona i analizuje kod do odwrocenia znakow:

#!/usr/bin/python

class Reverse:
    def __init__(self,data):
        self.data = []
        self.index = len(data)
    def __iter__(self):
        return self
    def next(self):
        if self.index == 0:
            raise StopInteraction
        self.index = self.index - 1
        return self.data[self.index]


rev = Reverse('spam')
for char in rev:
    print char
otrzymalam nastepujacy blad, ktory chwilowo nie wiem jak poprawić:
Traceback (most recent call last):
  File "./reverse.py", line 18, in
    for char in rev:
  File "./reverse.py", line 13, in next
    return self.data[self.index]
IndexError: list index out of range
Mam równieź pytanie odnośnie pracy metody iter i next.
Jeśli dobrze rozumiem, to iter wywołuje wszystkie elemety tablicy data.
Jak jest wywolywana metoda next? Czy nie musze jej wywolac jawnie, next() ?

Będę niezmiernie wdzięczna za wyjaśnienie tych problemów.

5
C/C++ / [C++] odwolanie sie do funkcji z innej klasy
« dnia: 2013-03-20, 20:01:52 »
Witajcie!
Wlasnie rozpoczelam nauke programowania obiektowego.
Napisalma klase, ktora mnozy ple trojkata.
A teraz chcialabym napisac druga klase, ktora odwoluje sie do funkcji z poprzedniej klasy i oblicza objetosc prosopadloscianu.

#include 
using namespace  std;

class Prostokat
{
        private:
          int x,y,z;

        public:
          void dane (int, int);
          int pole(void) {return x*y;}
          int pole2(int, int);

};

void Prostokat:: dane(int a,int b)
{
        x=a;
        y=b;
}

int Prostokat:: pole2(int a,int b)
{
        x=a;
        y=b;
    return x*y;
}

class Prostopadloscian
{        
        private:
          int m,n,h;
        public:        
          void dane(int,int,int);
          int obj(void) {return Prostokat.pole2(m,n) * h;}
};        
         
void Prostopadloscian:: dane(int a, int b, int c)
{
        m=a;
        n=b;
        c=h;
}


int main()
{
        Prostokat a,b;
        a.dane(2,4);

        cout<        cout<<"Pole prostokata a= "<
      Prostopadloscian A;
       cout<}
Niestety program sie sypie juz na linijce:
 int obj(void) {return Prostokat.pole2(m,n) * h;}
Tzn. 'Prostokat' nie odnosi sie do wartosci.
Czy moglibyscie mi wskazac, jak poprawnie powinnam sie odwolac do funcji z innej klasy?

6
C/C++ / [c++] linijka z programu
« dnia: 2013-03-19, 00:56:52 »
Analizuje program, ktory zostal napisany obiktowo i mam pytanie odnosnie nastepujacej linii:

Ref ark = new Assigned;
Czy to tworzy obiekt klasy w sposob dynamiczny? No niestety nie wiem...

Chcialbym rowniez zapytac, jaka ksiazke polecanie do nauki programowania obiektowego. W szczegonie szukam czegos, co przyda sie w zastosowaniach matematycznych, fizycznych.

Mam Symfonie, ale przyklady o imie, nazwisko, itp do mnie nie docieraja.

7
C/C++ / Wczytywanie danych z pliku do wektora
« dnia: 2013-03-15, 23:35:40 »
Napisalam drobny rogramik, ktory wczytuje dane z pliku do wektora:

dane.txt
1 23 44 556
2 34 3
23 321 2 32
3 0 0 2 22
main.cpp
#include
#include
#include
#include

using namespace std;
int main()
{
    ifstream plik("dane.txt");
    if (! plik) cout<<"Brak pliku 'Data.txt' w katalogu z programem. Sproboj ponownie\\n";

    int s = 0;
    vector V_s;
    ifstream S("dane.txt");
    string l;
    while (getline(S, l)) V_s.push_back(l);
    for (int i = 0; i < V_s.size(); i++) s++;
    S.close();
//    V_s.clear();

    for (int i=0; i    {
      cout<<"V["<    }
}
W ten sposob otrzymuje:
V[0]=1 23 44 556
V[1]=2 34 3
V[2]=23 321 2 32
V[3]=3 0 0 2 22

Chcialabym zapytac w jaki sposob powinnam zrobic, aby kazdy element pliku dane.txt byl osobnym elementem wektora, tzn
V[0]=1
V[1]= 23
V[2] =44
V[3] = 556
V[4] = 2
itd.

Bede wdzieczna za jakiekolwiek wskazowki.

8
C/C++ / problem z kompilacja
« dnia: 2013-03-12, 23:25:51 »
Witam!
Probuje skompilowac program, ale wyskakuja mi bledy:
undefined reference to `pow_di'
undefined reference to `s_wsfe'
 undefined reference to `do_fio'
 undefined reference to `e_wsfe'
Czy ktos z Was spotkal sie z takim problemem i wie jak roziwazc?
Biblioteki: Blas i Lapack mam zainstalowane.

9
C/C++ / [C++] mnożenie macierzy
« dnia: 2013-02-28, 21:06:58 »
Witajcie!
  Chciałabym pomnożyć dwie macierze za pomoca Blasa.
Wiem jak to zrobić, gdy mamy macierze postaci x[m][m], y[m][m]

tzn.
 .....
double *x, *y;
//tworzymy dynamiczna alokacje pamieci:
 x = new double [m*m];
  y = new double [m*m];

//wyswietlamy elementy tablicy x
   for (int i = 0; i < m; i++){
      for (int j = 0; j < m; j++)
      cout<< a[i*m + j];
      cout<<"\\n";
   }
 ....
W chili obecnej musze pomnozyc dwie tablice majace postac: t[m][m][m][m].

Dynamiczna alokacje pamieci robimy w nastepujacy sposob:
tt = new double[m*m*m*m];
Natomiast nie wiem jak pozniej taka tablice mam wyswietlic.

Czy moglabym liczyc na Wasza pomoc w tym temacie?

10
C/C++ / [c++] Mnozenie
« dnia: 2013-02-19, 01:36:43 »
Mam w programie zadeklarowane nastepujace tablice
double a[2][2], b[2][2], c[2][2];
i chcialabym pomnozyc je wg nastepujacego schematu

void mult(const double *a, const double *b, double *c, const int im, const int m)
 {
   int  ip;
    for(int i=0;i     for(int j=0;j      ip = i * im + j;
      c[ip]=0.0;
       for(int k=0;k         c[ip] += a[i * im + k] * b[k * im + j];
      }
    }
 }
co mam zrobic z tablicami a,b oraz c, by uniknac bledu:
cannot convert ‘double (*)[2]’ to ‘const double*’ for argument ‘1’ to ‘void mult(const double*, const double*, double*)’ ?

11
C/C++ / [c++] wczytywanie liczb z pliku do tablicy
« dnia: 2012-10-10, 13:04:32 »
witajcie!
 Mam plik z 3 kolumnami liczb i chcialabym wczytac je do tablicy. Stworzylam nastepujacy kod:
#include
#include
#include
using namespace std;
   int main()
{

    ifstream plik("wyniki.txt");
    if(!plik.is_open())return 0;
    int i = 0,j=0;
    string s= "";

    while(!(getline(plik,s)).eof())
         ++i;
         ++j;

    int tablica[100][3];
    plik.clear();
    plik.seekg(0);

    i=0;
    j=0;
    while(!getline(plik,s).eof())
     {
     tablica[i][j]= atof(s.c_str());
     ++i;
     ++j;
     }
    for(int i=0;i<100;++i)
    { for(int j=0;j<3;++j)
      {

       cout<      }
    }
    cin.get();


    return 0;
}
Jednkze zamiast wynikow wyrzucane sa jakies "smieci" z pamieci. Czy moglibyscie wskazac moj blad/bledy ?

12
Bash, skrypty powłoki / [bash]dokladnosc otrzymywanych liczb
« dnia: 2012-09-30, 11:03:48 »
Witajcie!
Mam pytnie odnosnie otrzymywanych wynikow w Bashu. Czy po uzyciu kaluatora bc, wyniki moga byc mniej dokladne?
Dokonalam kilka obliczen za pomoca komend:
pi=3.14159265358979323846264338327950288419716939937510

  C[0]=0

    for (( l=1; $l<=50; l=$((l+1)) )) ;
     do

       C[$l]=$(echo "scale=10; ${C[$l-1]} + ${w[$l]}*${n[$l]}*${n2[$l]}" | bc)

      done
     
     T=$(echo "scale=10; 3/$pi*${C[50]}" |bc)
          echo  $T ""
Otrzymany wynik w Bashu to 1938.55, natomiast w Matlbie jest to wynik 1938.78.

Mozecie mi wyjasnic skad bierze sie taka roznica? Zalezy mi by dostac jak najdokladniejsze wyniki.

13
Bash, skrypty powłoki / [bash] podstawianie wartosci
« dnia: 2012-09-28, 19:23:42 »
Moim drodzy!
Mam problem ze skryptem:
li=164

lili=0
lics=2.1
lik=1.3
lina=0.1
lirb=1.5

for x in li
 do
 for y in li na k rb cs
   do

    C=$(echo "scale=10; (${x}*${x}${y})" | bc)
Podstawiane sa tylko litery.
Natomiast chcialbym aby za ${x} byla podstawianawartosc 164,
a za ${x}${y} podstawiane byly kolejno wartosci 0, 2.2, 1.3, 0.1, 1.5


Czy moglibyscie mi troche pomoc?

14
Bash, skrypty powłoki / pi w Bashu
« dnia: 2012-09-16, 12:03:26 »
Witajcie!
Mam taki problem, chcialbym dokonac dzialania z pi, tak aby dostac jak najdokladniejszy wynik. niestety Bash nie oznaczeni pi. Czy moglibyscie mi podpowiedziec, jak to zrobic?

15
Bash, skrypty powłoki / notacja wyklanidicza
« dnia: 2012-09-12, 16:17:32 »
Hej!
Mam kilka plikow z wynikami w postaci :5.7E-003.
Mozecie mi podpowiedziec jak szybko zamienic na: 0.0057?

Strony: [1] 2