Reklama
Strona 7 z 8 PierwszaPierwsza ... 5678 OstatniaOstatnia
Pokazuje wyniki od 91 do 105 z 107

Temat: Torgowi Programiści - Nauka programowania od podstaw

  1. #91
    Avatar Ileev
    Data rejestracji
    2005
    Położenie
    instagram.com/ileev
    Wiek
    30
    Posty
    575
    Siła reputacji
    19

    Domyślny

    Mam pewien problem. Miałem do zrobienia zadanie.
    //Program otwiera 2 pliki z wygenerowanymi macierzami,
    //alokuje pamiec dla 3 tablic, z czego ostatnia jest
    //wynikiem mnozenia macierzy przez macierz.
    No i zrobiłem to niestety w wyniku mnożenia wychodzą mi dziwne liczby.

    Pierwsza macierz
    28 96
    49 45
    Druga macierz
    75 54
    04 50
    a wynik wychodzi taki :
    4045067 0
    4027520 0
    Czy jest w stanie ktoś znaleźć błąd w kodzie?
    //Program otwiera 2 pliki z wygenerowanymi macierzami,
    //alokuje pamiec dla 3 tablic, z czego ostatnia jest
    //wynikiem mnozenia macierzy przez macierz.
    #include <cstdlib>
    #include <stdio.h>
    #include <stdlib.h>

    int main()
    {
    //Zmienne i pliki
    int i,j,x,y,z;
    int wiersz1, wiersz2, wiersz3, kolumna1, kolumna2, kolumna3;
    int **tablica1, **tablica2, **tablica3;

    FILE * macierz1;
    macierz1 = fopen("pliki/macierz1.txt","r");
    fscanf(macierz1,"%d,%d",&wiersz1,&kolumna1);

    FILE * macierz2;
    macierz2 = fopen("pliki/macierz2.txt","r");
    fscanf(macierz2,"%d,%d",&wiersz2,&kolumna2);

    FILE * wynik ;
    wynik = fopen("pliki/wynik.txt","w+");

    //Sprawdzenie czy pliki istnieja
    if(!macierz1 && !macierz2)
    {
    printf("Brak plikow do wczytania!\n");
    system("PAUSE");
    return EXIT_SUCCESS;
    }
    //Czy mozliwe jest pomnozenie macierzy
    if(wiersz1 != kolumna2)
    {
    printf("Nie mozna pomnozyc podanych macierzy!\n");
    system("PAUSE");
    return EXIT_SUCCESS;
    }
    //Alokowanie pamieci dla pierwszej tablicy
    printf("Wykonuje alokacje pamieci dla pierwszej tablicy...\t");
    tablica1 = (int**) malloc(sizeof(int*) * wiersz1);
    for(i=0; i<wiersz1; i++)
    {
    tablica1[i] = (int *) malloc(sizeof(int) * kolumna1);
    }
    printf("Wykonano!\n") ;

    //Ladowanie pierwszej macierzy
    fscanf(macierz1, "\n");
    for(j=0; j<wiersz1; j++)
    {
    for(i=0; i<kolumna1; i++)
    {
    fscanf(macierz1," %d",&tablica1[j][i]);
    }
    fscanf(macierz1,"\n");
    }
    printf("Wczytywanie pierwszej macierzy zakonczone!\n");
    printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~\n");


    //Alokowanie pamieci dla drugiej tablicy
    printf("Wykonuje alokacje pamieci dla drugiej tablicy...\t");
    tablica2 = (int**) malloc(sizeof(int*) * wiersz2);
    for(i=0; i<wiersz2; i++)
    {
    tablica2[i] = (int *) malloc(sizeof(int) * kolumna2);
    }
    printf("Wykonano!\n");

    //Ladowanie drugiej macierzy
    fscanf(macierz2, "\n");
    for(j=0; j<wiersz2; j++)
    {
    for(i=0; i<kolumna2; i++)
    {
    fscanf(macierz2," %d",&tablica2[j][i]);
    }
    fscanf(macierz2,"\n");
    }
    printf("Wczytywanie drugiej macierzy zakonczone!\n");
    printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~\n");

    //Alokowanie pamieci dla tablicy wynikowej
    printf("Wykonuje alokacje pamieci dla tablicy wynikowej...\t");
    tablica3 = (int**) malloc(sizeof(int*) * wiersz1);
    for(i=0; i<wiersz1; i++)
    {
    tablica3[i] = (int *) malloc(sizeof(int) * kolumna2);
    }
    printf("Wykonano!\n");

    //Mnozenie macierzy
    printf("Wykonuje mnozenie macierzy...\n");
    i = 0; j = 0;
    for(z=0; z<kolumna1; z++)
    {
    for(y=0; y<wiersz2; y++)
    {
    for(x=0; x<wiersz1; x++)
    {
    tablica3[j][i] = tablica1[z][x] * tablica2[x][y];
    }
    }
    }
    printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~\n");
    printf("Wynik macierzy zostal zapisany do pliku 'wynik.txt'");
    for(j=0; j<wiersz1; j++)
    {
    fprintf (wynik, "\n");
    for(i=0; i<kolumna2; i++)
    {
    fprintf (wynik, "\t%d",tablica3[j][i]);
    }
    }

    for(i=0; i<wiersz1; i++)
    {
    free(tablica1[i]);
    }
    free(tablica1);

    for(i=0; i<wiersz2; i++)
    {
    free(tablica2[i]);
    }
    free(tablica2);

    for(i=0; i<kolumna1; i++)
    {
    free(tablica3[i]);
    }
    free(tablica3);

    fclose (macierz1);
    fclose (macierz2);
    fclose (wynik);
    getchar();
    return 0;
    }

  2. #92
    Avatar Bazan
    Data rejestracji
    2008
    Wiek
    31
    Posty
    1,909
    Siła reputacji
    18

    Domyślny

    Piszę grę saper na zaliczenie semestru. Piszę to w visual studio 2008 C++.

    Mam problem z tworzeniem tablicy struktury.

    Stworzylem sobie klasę gra, ktora ma strukturę

    Kod:
    class gra
    {
    private:
    struct pole 
    		{
    			int x; // wspolrzedna x
    			int y; // wspolrzedna y
    			int wartosc; // wartosc pola (ilosc min wokol tego pola)
    			bool stan; // odkryty / nie odkryty
    		};
    
    public:
    ...
    
    static void stworz_tablice(int x, int y); 
    }
    Do tego stworzylem sobie funkcje tworzaca tablice, wywoluje ja za pomocą: gra::stworz_tablice(4,6);

    Kod:
    
    
    void gra::stworz_tablice(int x, int y)
    {	
    	
    	srand (time_t(NULL));
    
    
    
    	gra::pole **tab = new gra::pole * [x];
    	for (int i = 0; i < x; i++) 
    	{
    		tab[i] = new gra::pole[y];
    	}
    
    
    	int aa = sizeof(tab);
    	int bb= sizeof(tab[0]);
    	MessageBox::Show("rozmiar tab= "+aa+"x"+bb+"");
    
    
    	int g = sizeof(tab)/sizeof(tab[0]);
    	int h= sizeof(tab[0])/sizeof(tab[0][0]);
    	
    	MessageBox::Show("rozmiar tab= "+g+"x"+h+" = "+g*h+"");
    		
            int l= (sizeof(tab) / sizeof(tab[0]));
    		MessageBox::Show("test = "+l+"");
     
    
    
    
    
    
            // To mniej wazne bo i tak mi gora nie dziala
    	for (int i=0; i<l;i++)
    	{	
    		int k= (sizeof(tab[i]) / sizeof(tab[i][0]));
    		MessageBox::Show("ilosc y= "+k+"");
    		for (int j=0;j<k;j++)
    		{
    			tab[i][j].x=i;
    			tab[i][j].y=j;
    			tab[i][j].wartosc = rand()%10;
    			if (tab[i][j].wartosc % 2 == 0)
    				tab[i][j].stan = true;
    			else 
    				tab[i][j].stan = false;
    			MessageBox::Show(
    				"pole("+tab[i][j].x+","+tab[i][j].y+")\n"+
    				"wartosc = "+tab[i][j].wartosc+"\n"+
    				"stan = "+tab[i][j].stan+""
    				);
    		}
    	}
    
    }


    Mam z nią taki problem, że:
    - Nie moge odczytac ilosci elementów tablicy. Caly czas pokazuje mi 4. Jak znalezc ile jest wierszy i kolumn?

    Wiem ze w tej funkcji moglbym dalej korzystac ze zmiennych podanych jako parametry. Ale dla przyszlych funkcji chcialbym te wartosci pobierac z informacji o samej tablicy, a nie dodatkowych zmiennych recznie wpisanych.


    Chce sobie najpierw wypelnic wszystkie pola tablicy, i pozniej je odczytac. Jak to mi bedzie dzialac to dalej z górki.

    Jak jest tu ktoś kto dobrze ogarnia C++, to moglbym dostac kontakt jakis typu skype / facebook / gg? Potrzebuje kogos do krotkiej pomocy na niektore tematy ktorych rozwiazania nie bede mogl znalezc :/ Raczej staram sie szukac sam rozwiazan, ale czas nagli znowu a wiadomo jak to jest z rozwiazaniami z neta. Trzeba sie przedrzec przez multum syfu zanim sie znajdzie dobre rozwiazanie.
    Ostatnio zmieniony przez Bazan : 31-05-2013, 17:35
    Dreaming by drumming. ˆˆ™

  3. Reklama
  4. #93
    Avatar Ander Twenty
    Data rejestracji
    2007
    Wiek
    28
    Posty
    4,414
    Siła reputacji
    20

    Domyślny

    Nie do końca śledziłem temat po drugiej lekcji, w ogóle zapomniałem o nim ale dzisiaj zrobiłem swój pierwszy prosty kalkulator operujący na 2 liczbach i podstawowych działaniach.

    To nazywam sukcesem xD

  5. #94
    Avatar Mysterious Boy
    Data rejestracji
    2010
    Położenie
    Venezuela
    Wiek
    30
    Posty
    2,503
    Siła reputacji
    15

    Domyślny

    Cytuj Ander Twenty napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Nie do końca śledziłem temat po drugiej lekcji, w ogóle zapomniałem o nim ale dzisiaj zrobiłem swój pierwszy prosty kalkulator operujący na 2 liczbach i podstawowych działaniach.

    To nazywam sukcesem xD
    Ja siedzę na 1 stronie i nie kapuję jakoś tego. Nie potrafię zrobić zadania z plutonem :|

  6. #95
    Avatar Cybuch
    Data rejestracji
    2004
    Położenie
    Poznań
    Wiek
    32
    Posty
    2,161
    Siła reputacji
    21

    Domyślny

    Panowie - chcecie nauczyć się programować to wydaje mi się, że najprostszym sposobem jest zakup książki do androida. Na androida piszę się prosto, jest świetne api, dobra społeczność, masa gotowych przykładów i efekty są 'namacalne' - wydaje mi się, że zaczynając o wiele bardziej cieszy HelloWorld na ekranie telefonu/emulatora niż ten na konsoli. Android jest też nieodłącznie związany z Javą, więc po pewnej praktyce będzie można zacząć uczyć się Javy, z którą już można wiązać przyszłość

  7. #96
    Avatar Absherr
    Data rejestracji
    2008
    Położenie
    Kraków
    Posty
    578
    Siła reputacji
    16

    Domyślny

    Tylko, że zaczynając od Javy przeskakujesz wiele problemów, które później wyjdą. Na przykład alokacja pamięci, wskaźniki czy referencje. No i dla kogoś, kto sam uczy się podstaw Android może się okazać zbyt trudny - za dużo obiektowego pisania na początku. IMHO lepiej zacząć niżej, od C++, a później się przenosić na inne języki.

  8. #97
    Avatar Kusterek
    Data rejestracji
    2013
    Położenie
    Warszawa
    Wiek
    31
    Posty
    1,710
    Siła reputacji
    13

    Domyślny

    C jest jezykiem lepszym na start niż android/java. Fajnie zaraz po C uczyć się C++. Sam osobiście uczę się teraz C# i jest jeszcze fajniejszym językiem niż C++ :D (brak wskaznikow <3) i chyba jak narazie najbardziej mi sie podoba

  9. #98

    Data rejestracji
    2010
    Posty
    2,657
    Siła reputacji
    16

    Domyślny

    @up
    Brak wskaźników? Kpisz sobie, ref tworzy wskaźnik do zmiennej. A gdy przesyłasz obiekty między funkcjami również posyłasz wskaźnik. Jedyna różnica to garbage collector kiedy zmienna jest out of scope..

  10. #99
    Avatar Kusterek
    Data rejestracji
    2013
    Położenie
    Warszawa
    Wiek
    31
    Posty
    1,710
    Siła reputacji
    13

    Domyślny

    @up
    dobra, w języku musi być coś co przechowuje adresy zmiennych ale nie działa w C# to tak jak w C++ tylko wygodniej dla programisty.

  11. #100

    Data rejestracji
    2010
    Posty
    2,657
    Siła reputacji
    16

    Domyślny

    Nieprawda. :)
    Adresy zmiennych to właśnie wskaźniki. Kiedy operujesz obiektem, operujesz tak naprawde wskaźnikiem. Dlatego np w momencie , kiedy przeslesz wskaznik do innej funkcji, a potem zmienisz w tej funkcji cos w obiekcie, to jak wrocisz do macierzystego kontekstu, ten obiekt bedzie zmieniony - bo zmiany byly dokonane na tym obiekcie. Co innego kiedy nadpiszesz wskaźnik w lokalnym kontekście - wtedy w macierzystym kontekscie bedzie inny obiekt niz ten w kontekście lokalnym :)

    Odpowiedniki C# i C++:

    Pierwszy przypadek - przekazanie przekazanie przez wartość ( a wartością jest wskaźnik ):
    C#:
    Kod:
    class Obiekt2 {
    public void metoda(Obiekt obiekt_lokalny){
    obiekt_lokalny.a = 123;
    obiekt_lokalny = new Obiekt();
    obiekt_lokalny.a = 456;
    }
    
    [...]
    Obiekt obiekt = new Obiekt();
    Obiekt2 obiekt2 = new Obiekt2();
    obiekt2.metoda(obiekt);
    //obiekt.a = 123;
    [...]
    C++
    Kod:
    
    void Obiekt2::metoda(Obiekt* obiekt_lokalny) {
    obiekt_lokalny->a = 123;
    obiekt_lokalny = new Obiekt();
    obiekt_lokalny->a = 456;
    }
    [...]
    Obiekt* obiekt = new Obiekt();
    Obiekt2* obiekt2 = new Obiekt2();
    obiekt2->metoda(obiekt);
    //obiekt->a = 123;
    Drugi przypadek: przekazanie przez referencję ( czyli wskaźnika do wskaźnika ):

    C#:
    Kod:
    class Obiekt2 {
    public void metoda(ref Obiekt obiekt_lokalny){
    obiekt_lokalny.a = 123;
    obiekt_lokalny = new Obiekt();
    obiekt_lokalny.a = 456;
    }
    
    [...]
    Obiekt obiekt = new Obiekt();
    Obiekt2 obiekt2 = new Obiekt2();
    obiekt2.metoda(ref obiekt);
    //obiekt.a = 456;
    [...]
    C++
    Kod:
    
    void Obiekt2::metoda(Obiekt** obiekt_lokalny) {
    *obiekt_lokalny->a = 123;
    *obiekt_lokalny = new Obiekt();
    *obiekt_lokalny->a = 456;
    }
    [...]
    Obiekt* obiekt = new Obiekt();
    Obiekt2* obiekt2 = new Obiekt2();
    obiekt2->metoda(&obiekt);
    //obiekt->a = 456;
    ( mozliwe ze sie jeblem w ostatnim kodzie C++, ale mniejwiecej na tej zasadzie to dziala ).

  12. #101
    Avatar Kusterek
    Data rejestracji
    2013
    Położenie
    Warszawa
    Wiek
    31
    Posty
    1,710
    Siła reputacji
    13

    Domyślny

    a czy to nie jest tak, że jak już nie ma '->' to juz nie jest to taki typowy wskaznik?
    Nie jestem specem, C# dopiero sie ucze ale coś mi świta, że w C# nie ma takich typowych wskaznikow jak bylo to w przypadku C++

    @down
    dobrze mądrego posłuchac :>
    Ostatnio zmieniony przez Kusterek : 18-09-2013, 01:26

  13. #102

    Data rejestracji
    2010
    Posty
    2,657
    Siła reputacji
    16

    Domyślny

    no nie ;d z tego co wiem to -> to po prostu operator tak jak . tyle ze nie do samych obiektow a dla wskaznikow na obiekty.

    Czyli jesli sie dobrze orientuje to:

    Kod:
    Obiekt* obiekt = new Obiekt();
    obiekt->costamcostam
    
    i
    (*obiekt).costamcostam
    sa sobie równe. Tak mi sie wydaje, malo robilem w C++ wiec nie dam sobie jąder uciąć za to ;]

    @EDIT
    @Absherr
    Dzięki za sprawdzenie! :)
    Ostatnio zmieniony przez Alex Fortune : 18-09-2013, 15:28

  14. #103
    Avatar Hemingway
    Data rejestracji
    2013
    Położenie
    Oak Park
    Wiek
    30
    Posty
    216
    Siła reputacji
    11

    Domyślny

    Ktos z was tutaj bawil sie w Project Euler? Jesli tak, moze zalozymy jakis temat gdzie nawzajem mozna sobie dawac wskazowki? ;d

  15. #104
    Avatar Absherr
    Data rejestracji
    2008
    Położenie
    Kraków
    Posty
    578
    Siła reputacji
    16

    Domyślny

    @up
    Ja coś robiłem kiedyś, ale chętnie bym zaczął od nowa.

    @Havaran
    Cytuj Havaran napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    no nie ;d z tego co wiem to -> to po prostu operator tak jak . tyle ze nie do samych obiektow a dla wskaznikow na obiekty.

    Czyli jesli sie dobrze orientuje to:

    Kod:
    Obiekt* obiekt = new Obiekt();
    obiekt->costamcostam
    
    i
    (*obiekt).costamcostam
    sa sobie równe. Tak mi sie wydaje, malo robilem w C++ wiec nie dam sobie jąder uciąć za to ;]
    Nie pisałem nic w C++ od roku, ale wygląda że tak: http://ideone.com/024SF1
    Ostatnio zmieniony przez Absherr : 18-09-2013, 13:08

  16. #105
    Avatar Messer
    Data rejestracji
    2004
    Położenie
    Płock
    Wiek
    32
    Posty
    499
    Siła reputacji
    20

    Domyślny

    Co powiecie na zamknięcie tego tematu i otworzenie kilku podrzędnych?

Reklama

Informacje o temacie

Użytkownicy przeglądający temat

Aktualnie 1 użytkowników przegląda ten temat. (0 użytkowników i 1 gości)

Podobne tematy

  1. Nauka jezyka programowania z ksiazek.
    Przez darss5 w dziale Programowanie
    Odpowiedzi: 18
    Ostatni post: 13-11-2015, 06:46
  2. nauka programowania - maszyny
    Przez bellatrix w dziale Programowanie
    Odpowiedzi: 11
    Ostatni post: 29-01-2015, 23:03
  3. Odpowiedzi: 5
    Ostatni post: 05-03-2013, 02:33
  4. Programiści torga, wzywam was! Chodzenie po katalogach w systemie, C#
    Przez piorunek098 w dziale Sprzęt i oprogramowanie
    Odpowiedzi: 1
    Ostatni post: 13-01-2013, 23:41
  5. Nauka programowania poprzez książki
    Przez Abovner w dziale Programowanie
    Odpowiedzi: 3
    Ostatni post: 03-04-2012, 22:08

Zakładki

Zakładki

Zasady postowania

  • Nie możesz pisać nowych tematów
  • Nie możesz pisać postów
  • Nie możesz używać załączników
  • Nie możesz edytować swoich postów
  •