In effetti è vero...facciamo che prima provo a completarlo e poi, in fase di pulizia, sistemo queste cose. A proposito di completare, mi serve ancora il tuo aiuto. Ho scritto
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <iomanip>
using namespace std;
bool griglia [9][9];
char mat [9][9];
void DisponiNavi() {
    srand(time(NULL));
    for (int i = 1; i < 10; ++i) {
        for(int j = 1; j < 10; ++j) {
            griglia[i][j] = false;
        }
    }
    int navi = 0;
    while (navi < 20) {
        griglia [rand()%9+1][rand()%9+1] = true;
        ++navi;
    }
}
void Crea() {
    for (int m = 1; m <= 9; ++m) {
        for (int n = 1; n <= 9; ++n) {
            mat[m][n] = '.';
        }
    }
}
void Stampa() {
    int capo = 0;
    for (int m = 1; m <= 9; ++m) {
        for (int n = 1; n <= 9; ++n) {
            cout<<setw(3)<<mat[m][n];
            ++capo;
            if (capo%9 == 0)
                cout<<endl<<endl;
        }
    }
}
int main () {
    int TIRI = 10;
    int riga, colonna;
    Crea();
    Stampa();
    DisponiNavi();
    cout<<"Hai 10 tiri a disposizione"<<endl;
    for (int tiriFatti = 1; tiriFatti <= TIRI; ++tiriFatti) {
    cout<<"Inserisci la riga: ";
    cin>>riga;
    cout<<"Inserisci la colonna: ";
    cin>>colonna;
    if (griglia[riga][colonna]) {
        cout<<"Bravo"<<endl;
        ++TIRI;
        cout<<"Hai ancora "<<TIRI-tiriFatti<<" tiri a disposizione"<<endl;
        mat[riga][colonna] = 'X';
        Stampa();
    }
    else{
        cout<<"Acqua"<<endl;
        cout<<"Hai ancora "<<TIRI-tiriFatti<<" tiri a disposizione"<<endl;
        mat[riga][colonna] = 'O';
        Stampa();
        }
    }
    cout<<endl;
    system("PAUSE");
}
e poi ho provato ad aggiungere la bool MettiBarca e ho scritto
bool MettiBarca (int dimensione) {
    dimensione = rand()%4+1;
    for (int i = 1; i < 10; ++i) {
        for(int j = 1; j < 10; ++j) {
            if (griglia [i][j] = true && j + dimensione <= 9) {
                for (; j < j + dimensione; ++j) {
                    griglia [i][j] = true;
                }
            }
        }
    }
}
ma mi sa che ha sbagliato qualcosa, o almeno mi sa che non faccia quello che voglio. A questo punto ti chiedo di darci una sistemata...il ragionamento non mi sembra sbagliato: se un punto è true sorteggia una dimensione tra 1 e 4 e, per j che va da quella del punto a j + dimensione, rendi true tutte le caselle adiacenti orizzontali...mah...