Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Pomoc z programem

Ostatnio zmodyfikowano 2009-03-25 21:45
Autor Wiadomość
steckel
Temat założony przez niniejszego użytkownika
» 2009-03-25 19:25:51
Poprawiłem program względem 1 pytania:

C/C++
#include <iostream>
#include <ctime>
#include <console.h>
using namespace std;

int wysokosc;
int szerokosc;
int il_min;
int * plansza;

void wczytaj();
void losuj();


int main()
{
    wczytaj();
    plansza = new int[ szerokosc ][ wysokosc ];
    losuj( plansza );
    system( "cls" );
   
}

void wczytaj()
{
    cout << "Wprowadz wysokosc planszy:";
    cin >> wysokosc; wysokosc += 2; if( wysokosc < 7 ) wysokosc = 5; if( wysokosc > 22 ) wysokosc = 22;
    cout << "Wprowadz szerokosc planszy:";
    cin >> szerokosc; szerokosc += 2; if( szerokosc < 7 ) szerokosc = 5; if( szerokosc > 42 ) szerokosc = 42;
    cout << "Wprowadz ilosc min";
    cin >> il_min; if( il_min < 5 ) il_min = 5; if( il_min > wysokosc * szerokosc * 4 / 5 ) il_min = wysokosc * szerokosc * 4 / 5;
}

void losuj()
{
    for( int a = 0; a < szerokosc; a++ )
    {
        for( int b = 0; b < wysokosc; b++ )
        {
            plansza[ a ][ b ] = 0;
        }
    }
    srand( time( 0 ) );
    for( int a = 0; a < il_min; )
    {
        int x = rand() %( szerokosc - 2 ) + 1;
        srand( rand() );
        int y = rand() %( wysokosc - 2 ) + 1;
        if( plansza[ x ][ y ] == 0 )
        {
            plansza[ x ][ y ] = 9;
            for( int b = 0; b <= 2; b++ )
            {
                for( int a = 0; b <= 2; a++ )
                {
                    if( plansza[ x + a - 1 ][ y + b - 1 ] != 9 )
                    {
                        plansza[ x + a - 1 ][ y + b - 1 ] ++;
                    }
                }
            }
            a++;
        }
    }
}

Błędy:

In function `int main()':
18: error: `wysokosc' cannot appear in a constant-expression
12: error: too many arguments to function `void losuj()'
19: error: at this point in file
In function `void losuj()':
40: error: invalid types `int[int]' for array subscript
49: error: invalid types `int[int]' for array subscript
51: error: invalid types `int[int]' for array subscript
56: error: invalid types `int[int]' for array subscript
58: error: invalid types `int[int]' for array subscript
P-5017
pekfos
» 2009-03-25 20:37:16
jeśli jest
int losuj( int * );
to dalej nie moze być
int losuj()
P-5019
DejaVu
» 2009-03-25 20:44:57
Cóż... forma w jakiej obecnie chcesz napisać program to przeforsowanie na siłę rozwiązania nie koniecznie znając techniki do tego celu użyteczne.

Rozwiązanie pierwsze:
C/C++
int ** tablica = new int *[ y ];
for( int i = 0; i < y; i++ ) tablica[ i ] = new int[ x ];


Rozwiązanie drugie:
C/C++
#include <vector>
//...
std::vector < std::vector < int > > tablica;
tablica.resize( y );
for( int i = 0; i < x; i++ ) tablica[ i ].resize( x );

P-5021
GoldWolf
» 2009-03-25 20:53:19
Nie chciałbym być złośliwy ale to nie ma sensu, widać masz spore braki do tego nie wiem skąd się nauczyłeś tak pisać programy:
C/C++
cin >> wysokosc; wysokosc += 2; if( wysokosc < 7 ) wysokosc = 5; if( wysokosc > 22 ) wysokosc = 22;
cout << "Wprowadz szerokosc planszy:";
cin >> szerokosc; szerokosc += 2; if( szerokosc < 7 ) szerokosc = 5; if( szerokosc > 42 ) szerokosc = 42;
cout << "Wprowadz ilosc min";
cin >> il_min; if( il_min < 5 ) il_min = 5;

Przecież można tak nie idzie tego analizować spokojnie:
C/C++
cin >> wysokosc;
wysokosc += 2;
if( wysokosc < 7 )
     wysokosc = 5;

if( wysokosc > 22 )
     wysokosc = 22;

cout << "Wprowadz szerokosc planszy:";
cin >> szerokosc;
szerokosc += 2;
if( szerokosc < 7 )
     szerokosc = 5;

if( szerokosc > 42 )
     szerokosc = 42;

cout << "Wprowadz ilosc min";
cin >> il_min; if( il_min < 5 ) il_min = 5;

Do tego jakieś komentarze by się przydały nie jesteśmy wróżkami leśnymi by zgadywać co ci po głowie chodzi.

Po drugie program się pisze stopniowo krok po kroku,a nie napiszesz cały kod, a potem się dziwisz, że masz błędy. Napisz sobie prosty program main z jedną dodatkową funkcją
void wczytaj();. Jak już ci się to uda i będzie działać to zastosują drugą funkcję. Może masz braki, o których nie zdajesz sobie sprawy.

Każdy z Nas jest to Twojej dyspozycji, ale programu za Ciebie nie napiszemy........
P-5022
steckel
Temat założony przez niniejszego użytkownika
» 2009-03-25 20:58:29
C/C++
int ** tablica = new int *[ y ];
for( int i = 0; i < x; i++ ) tablica[ y ][ i ] = new int[ x ];

Mam to napisać we funkcji int main() ?
Jeśli tak to czy ta tablica globalna, tak żebym nie musiał przekazywać jej jako parametr do każdej funkcji?

/----------

funkcja wczytaj() wczytuje wysokość i szerokość planszy oraz ilość min, a także dostosowuje te wartości do odpowiednich przedziałów. W tej funkcji kompilator nie zgłosił błędów. Największym problemem jest tablica dwuwymiarowa tworzona podczas wykonywania programu, gdyż mam trudności z operowaniem na niej w innych funkcjach.
P-5023
DejaVu
» 2009-03-25 20:59:38
Myślę, że komentarze byłyby zbędne... myślę też, że program możemy też za Ciebie ten mały napisać... ale nic się nie nauczysz :)

/edit:
Przed main'em:
int ** tablica = NULL;

w main'ie:
[Code src="C++"]tablica = new int*[y];
//... itd
[/code]
P-5025
steckel
Temat założony przez niniejszego użytkownika
» 2009-03-25 21:11:24
Właśnie się nauczyłem jak się to robi z tablicami dwuwymiarowymi, bo wcześniej myślałem, że można je przekazywać jak tablicę jednowymiarową. Jeszcze pomyślę nad funkcją losuj(), bo program się zawiesza, a kompilator nie wyświetla błędów. Dzięki serdeczne za pomoc :)

/------

Program zawiesza się tutaj:

C/C++
for( int a = 0; a < szerokosc; a++ )
{
    for( int b = 0; b < wysokosc; b++ )
    {
        plansza[ a ][ b ] = 0;
    }
}

Czy do tej tablicy należy się jakoś inaczej odwoływać?
P-5026
DejaVu
» 2009-03-25 21:20:11
Popraw:
plansza[ a ][ b ] = 0;
na:
plansza[ b ][ a ] = 0;
P-5028
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona