[C++] Wypełnianie tablicy dwuwymiarowej

koralina19
Użytkownik
Użytkownik
Posty: 48
Rejestracja: 6 gru 2015, o 00:59
Płeć: Kobieta
Lokalizacja: Warszawa
Podziękował: 1 raz

[C++] Wypełnianie tablicy dwuwymiarowej

Post autor: koralina19 »

Muszę napisać program, który wyświetli mi taką tablicę

Kod: Zaznacz cały

         0 n 0 0
         1 n 1 1 
         0 n 0 0 
         0 n 0 0
Gdzie n to liczba wprowadzona przez użytkownika. Na razie napisałam coś takiego, lecz źle mi się wyświetla. Gdzie popełniam błąd ??

Kod: Zaznacz cały

[code]#include <iostream>

using namespace std;
int tab[4][4];

int main()
{
    int n;
    for(int i=0;i<4;i++)
    {
        for(int j=0;j<4;j++)
        {
            tab[i][j]='0';
            if(i==2)
            {
                tab[i][j]='1';
            }
            if(j==2)
            {
                cout<<"podaj liczbe: "<<endl;
                cin>>n;
                tab[i][j]=n;
            }

        }
        for(int i=0;i<4;i++)
        {
            for(int j=0;j<4;j++)
            {
                cout<<tab[i][j]<<" ";
            }
            cout<<endl;
        }
    }
    return 0;
}
[/code]
Pozdrawiam :)
macik1423
Użytkownik
Użytkownik
Posty: 875
Rejestracja: 8 paź 2009, o 10:13
Płeć: Mężczyzna
Lokalizacja: R do M
Podziękował: 56 razy
Pomógł: 234 razy

[C++] Wypełnianie tablicy dwuwymiarowej

Post autor: macik1423 »

Kod: Zaznacz cały

#include <iostream>
using namespace std;
int tab[4][4];

int main()
{
    int n;
    cout<<"podaj liczbe: "<<endl;
    cin>>n;
    for(int i=0;i<4;i++)
    {
        for(int j=0;j<4;j++)
        {
            tab[i][j]=char(0);
            if(i==1)
            {
                tab[i][j]=char(1);
            }
            if(j==1)
            {
                tab[i][j]=n;
            }
        }
    }
    for(int i=0;i<4;i++)
    {
        for(int j=0;j<4;j++)
        {
            cout<<tab[i][j]<<" ";
        }
        cout<<endl;
    }
    return 0;
}
koralina19
Użytkownik
Użytkownik
Posty: 48
Rejestracja: 6 gru 2015, o 00:59
Płeć: Kobieta
Lokalizacja: Warszawa
Podziękował: 1 raz

[C++] Wypełnianie tablicy dwuwymiarowej

Post autor: koralina19 »

Dziękuję bardzo za pomoc
macik1423
Użytkownik
Użytkownik
Posty: 875
Rejestracja: 8 paź 2009, o 10:13
Płeć: Mężczyzna
Lokalizacja: R do M
Podziękował: 56 razy
Pomógł: 234 razy

[C++] Wypełnianie tablicy dwuwymiarowej

Post autor: macik1423 »

Twoja tablica tab[i][j]='0' była intem, dlatego zamieniała '0' na \(\displaystyle{ 48}\), podobnie z '1', patrz tablica ascii.
koralina19
Użytkownik
Użytkownik
Posty: 48
Rejestracja: 6 gru 2015, o 00:59
Płeć: Kobieta
Lokalizacja: Warszawa
Podziękował: 1 raz

[C++] Wypełnianie tablicy dwuwymiarowej

Post autor: koralina19 »

Jeszcze mam jedno pytanie. Starałam się napisać program, gdzie powstanie tablica 5x5, w której komputer sam wylosuje liczby i będzie musiał stwierdzić, która liczba jest parzysta, a która nie parzysta dodając obok liczby litere n/p. Niby udało mi się napisać ten program jednak on losuje jedynie 1 liczbę, nie wiem dlaczego ?

Kod: Zaznacz cały

#include <iostream>
#include <cstdlib>
#include <time.h>

using namespace std;
int n;
int tab[5][5];
int main()
{
    for(int i=0;i<5;i++)
    {
        for(int j=0;j<5;j++)
        {
            srand(time(NULL));
            n=rand()%100+1;
            tab[i][j]=n;

        }
    }
    for(int i=0;i<5;i++)
    {
        for(int j=0;j<5;j++)
        {
           if(n%2==0)
            {
                cout<<tab[i][j]<<char('p')<<" ";
            }
            else
            {
                cout<<tab[i][j]<<char('n')<<" ";
            }

        }
        cout<<endl;
    }
    return 0;
}

macik1423
Użytkownik
Użytkownik
Posty: 875
Rejestracja: 8 paź 2009, o 10:13
Płeć: Mężczyzna
Lokalizacja: R do M
Podziękował: 56 razy
Pomógł: 234 razy

[C++] Wypełnianie tablicy dwuwymiarowej

Post autor: macik1423 »

Może tak, chociaż nie podoba mi się to:

Kod: Zaznacz cały

#include <iostream>
#include <cstdlib>
#include <time.h>

using namespace std;
int n;
int tab[5][5];
int main()
{
    for(int i=0;i<5;i++)
    {
        for(int j=0;j<5;j++)
        {
            srand(time(NULL));
            n=n+rand()%100+1;
            tab[i][j]=n;

        }
    }
    for(int i=0;i<5;i++)
    {
        for(int j=0;j<5;j++)
        {
           if(tab[i][j]%2==0)
            {
                cout<<tab[i][j]<<char('p')<<" ";
            }
            else
            {
                cout<<tab[i][j]<<char('n')<<" ";
            }

        }
        cout<<endl;
    }
    return 0;
}
koralina19
Użytkownik
Użytkownik
Posty: 48
Rejestracja: 6 gru 2015, o 00:59
Płeć: Kobieta
Lokalizacja: Warszawa
Podziękował: 1 raz

[C++] Wypełnianie tablicy dwuwymiarowej

Post autor: koralina19 »

Chyba nie, bo on dodaje do n, poprzednie n

-- 3 lut 2016, o 20:32 --

już wiem gdzie jest błąd funkcja srand nie może być w tej pętli

Kod: Zaznacz cały

#include <iostream>
#include <cstdlib>
#include <time.h>

using namespace std;

int tab[5][5];

int main()
{
srand(time(NULL));
    for(int i=0;i<5;i++)
    {
        for(int j=0;j<5;j++)
        {


            tab[i][j]=rand()%100+1;

        }
    }
    for(int i=0;i<5;i++)
    {
        for(int j=0;j<5;j++)
        {
           if(tab[i][j]%2==0)
            {
                cout<<tab[i][j]<<char('p')<<" ";
            }
            else
            {
                cout<<tab[i][j]<<char('n')<<" ";
            }

        }
        cout<<endl;
    }
    return 0;
}
SlotaWoj
Użytkownik
Użytkownik
Posty: 4211
Rejestracja: 25 maja 2012, o 21:33
Płeć: Mężczyzna
Lokalizacja: Kraków PL
Podziękował: 2 razy
Pomógł: 758 razy

[C++] Wypełnianie tablicy dwuwymiarowej

Post autor: SlotaWoj »

Informacje nt. pierwszego kodu.

W C++ tablice są indeksowane od 0, więc powinno być:

Kod: Zaznacz cały

...
if (i==1)
...
  if (j==1)
...
Dodatkowo podstawiasz wartości znakowe:

Kod: Zaznacz cały

...
tab[i][j]='0';
...
  tab[i][j]='1';
...
równe 48 (kod znaku 0) i 49 (kod znaku 1)oraz numeryczną

Kod: Zaznacz cały

...
  tab[i][j]=n;
...
Powinno być:

Kod: Zaznacz cały

...
tab[i][j]=0;
...
  tab[i][j]=1;
...
W temacie zadania jest, że w 1-szej kolumnie ma być ta sama wartość n, więc wczytywanie tej wartości powinno być przed wszystkimi pętlami.
koralina19
Użytkownik
Użytkownik
Posty: 48
Rejestracja: 6 gru 2015, o 00:59
Płeć: Kobieta
Lokalizacja: Warszawa
Podziękował: 1 raz

[C++] Wypełnianie tablicy dwuwymiarowej

Post autor: koralina19 »

Mam już ostatnią prośbę . Muszę napisać program który zlicza iloczyn do czasu gdy iloczyn>=500 lub podana liczba jest większa od poprzedniej o 15 lub więcej. Już długo męczę się nad tym zadaniem i nie wiem gdzie popełniam błąd

Kod: Zaznacz cały

#include <iostream>
#include <cstdlib>

using namespace std;


int main()
{
    int liczba;
    int iloczyn=1;
    int poprzednia;
    
    do
    {
        cout<<"podaj liczbe: "<<endl;
        cin>>liczba;
        poprzednia=liczba;
        iloczyn*=liczba;



    }while((iloczyn<500)&&((liczba-poprzednia)<15));

    cout<<"KONIEC PROGRAMU!!"<<endl;
    cout<<"Iloczyn wynosi: "<<iloczyn<<endl;
    cout<<"Ostatnia liczba to: "<<liczba<<endl;
    return 0;
}
dziewczynka90
Użytkownik
Użytkownik
Posty: 74
Rejestracja: 1 lut 2016, o 12:42
Płeć: Kobieta
Lokalizacja: Poznan
Pomógł: 20 razy

[C++] Wypełnianie tablicy dwuwymiarowej

Post autor: dziewczynka90 »

Miałaś pisać Iloczyn<500 chyba
To znowu ja ta gwiazda przybywam bo chce pomóc

Kod: Zaznacz cały

cin>>liczba;
poprzednia=liczba;
iloczyn*=liczba;
poprzednia=liczba To masz mieć przed CIN>> bo zobacz masz cały czas takie same i poprzednia-liczba zawsze 0 w pętli czyli <15 rozumiesz??
Na pierwszym obrocie pętli nie ma liczby poprzedniej i niewiem jak to zrobić:D ale dałabym może poza pętlą wejście pierwszej:D:D i ona wchodzi i Zaczyna się Pętla:D Patrz

Kod: Zaznacz cały

cin>>liczba;
iloczyn*=liczba;
Teraz zaczynasz pętelke:D bez guzika:P:P

Kod: Zaznacz cały

poprzednia=liczba;
cin>>liczba;
iloczyn*=liczba;
Patrz jak to działa Iloczyn mnożony przez nowa liczbe a poprzednia zostaje ta sama co początkowa:D:D i porównuje CI czy więcej różnicy od 15

Napisz czy zadziałał -- 4 lut 2016, o 00:53 --Próbujesz:D

Kod: Zaznacz cały

#include <iostream>
#include <cstdlib>

using namespace std;


int main()
{
    int liczba;
    cin>>liczba;
    int iloczyn=liczba;
    int poprzednia=liczba;
    
    do
    {
        poprzednia=liczba;
        cout<<"podaj liczbe: "<<endl;
        cin>>liczba;
        iloczyn*=liczba;



    }while((iloczyn<500)&&((liczba-poprzednia)<15));

    cout<<"KONIEC PROGRAMU!!"<<endl;
    cout<<"Iloczyn wynosi: "<<iloczyn<<endl;
    cout<<"Ostatnia liczba to: "<<liczba<<endl;
    return 0;
}
koralina19
Użytkownik
Użytkownik
Posty: 48
Rejestracja: 6 gru 2015, o 00:59
Płeć: Kobieta
Lokalizacja: Warszawa
Podziękował: 1 raz

[C++] Wypełnianie tablicy dwuwymiarowej

Post autor: koralina19 »

Teraz działa

Tylko zapomniałaś o jednym

Kod: Zaznacz cały

cout<<"podaj liczbe: "<<endl
przed pętlą wielkie dzięki
macik1423
Użytkownik
Użytkownik
Posty: 875
Rejestracja: 8 paź 2009, o 10:13
Płeć: Mężczyzna
Lokalizacja: R do M
Podziękował: 56 razy
Pomógł: 234 razy

[C++] Wypełnianie tablicy dwuwymiarowej

Post autor: macik1423 »

Ten program nie działa jeśli wpiszemy np. najpierw 30 potem 2, albo 20, 17, 1.
Potrzeba dodać wartość bezwzględną abs(liczba-poprzednia)<15
Moja propozycja:

Kod: Zaznacz cały

#include <iostream>
#include <cstdlib>
#include <math.h>
using namespace std;
int liczba[100];
int iloczyn=1;
int main()
{
    int i=1;
    cout<<"podaj liczbe:"<<endl;
    cin>>liczba[0];
    cout<<"podaj liczbe:"<<endl;
    cin>>liczba[1];
    while((iloczyn<500)&&(abs(liczba[i]-liczba[i-1]))<15)
    {
        i++;
        cout<<"podaj liczbe:"<<endl;
        cin>>liczba[i];
        iloczyn*=liczba[i];

    }
    cout<<"KONIEC PROGRAMU!!"<<endl;
    cout<<"Iloczyn wynosi: "<<iloczyn*liczba[0]*liczba[1]<<endl;
    cout<<"Ostatnia liczba to: "<<liczba[i]<<endl;
    return 0;
}
SlotaWoj
Użytkownik
Użytkownik
Posty: 4211
Rejestracja: 25 maja 2012, o 21:33
Płeć: Mężczyzna
Lokalizacja: Kraków PL
Podziękował: 2 razy
Pomógł: 758 razy

[C++] Wypełnianie tablicy dwuwymiarowej

Post autor: SlotaWoj »

@Macik1423
koralina19 pisze:... podana liczba jest większa od poprzedniej o 15 lub więcej.
ODPOWIEDZ