Visualizzazione dei risultati da 1 a 1 su 1
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2016
    Messaggi
    1

    Aiuto Programma non funziona!

    Ciao a tutti, per venerdi devo fare un programma per scuola.
    il programma è chiamato WATERMAP, infatti questo simula, dato un territorio(matrice) ed una sorgente d'acqua(casella data dall'utente matrice) il percorso che compie l'acqua su questo territorio. l'acqua quindi scorrerà sulle celle che avranno un'altezza più bassa della sorgente d'acqua e le caselle più "basse" a sua volta, se hanno intorno celle più "basse" di queste, faranno scorrere l'acqua su quest'ultime e così via.

    l'algoritmo che avevo pensato io si basa su questo procedimento:
    1)viene fornita dall'utente la matrice di struct, la quale al suo interno contiene:altezza,minore e controllato.
    2)viene data la sorgente e si inizia a controllare le 8 caselle che ha intorno.se la casella controllata è minore della sorgente, minore=1 e controllato=1, altrimenti minore=0 e controllato=0.
    3)a fine del controllo andiamo a ricercare una casella che ha minore=1 ed appena trovata si ripete il controllo intorno ad essa, e due variabili che tengono il "segno" di dove si trovava la casella prendono le sue coordinate.
    4)il ciclo finisce quando tutte le caselle sono state controllate.

    (il programma fa tutto,ma printa in modo sbagliato il percorso dell'acqua.)


    #include <iostream>
    using namespace std;
    #define MAX 100


    struct casella{
    int altezza;
    int controllato;
    int minore;


    };


    void acquisisciterritorio(struct casella territorio[MAX][MAX],int righe,int colonne){
    int i,j;
    for(i=0; i<righe; i++)
    for(j=0; j<colonne; j++)
    {
    cout<<"dammi l'altezza";
    cin>>territorio[i][j].altezza;
    territorio[i][j].controllato=0;
    territorio[i][j].minore=0;
    }
    }




    void controllocircostante(casella territorio[][MAX],int righe,int colonne,int rsorg,int csorg){
    //CONTROLLO INTORNO ALLA SORGENTE
    if(territorio[rsorg][csorg].altezza >= territorio[rsorg-1][csorg-1].altezza)
    {
    territorio[rsorg-1][csorg-1].minore=1;
    territorio[rsorg-1][csorg-1].controllato=1;
    }
    else
    {
    territorio[rsorg-1][csorg-1].controllato=1;
    territorio[rsorg-1][csorg-1].minore=0;
    }
    if(territorio[rsorg][csorg].altezza >= territorio[rsorg-1][csorg].altezza)
    {
    territorio[rsorg-1][csorg].minore=1;
    territorio[rsorg-1][csorg].controllato=1;
    }
    else
    {
    territorio[rsorg-1][csorg].controllato=1;
    territorio[rsorg-1][csorg].minore=0;
    }
    if(territorio[rsorg][csorg].altezza >= territorio[rsorg-1][csorg+1].altezza)
    {
    territorio[rsorg-1][csorg+1].minore=1;
    territorio[rsorg-1][csorg+1].controllato=1;
    }
    else
    {
    territorio[rsorg-1][csorg+1].controllato=1;
    territorio[rsorg-1][csorg+1].minore=0;
    }
    if(territorio[rsorg][csorg].altezza >= territorio[rsorg][csorg-1].altezza)
    {
    territorio[rsorg][csorg-1].minore=1;
    territorio[rsorg][csorg-1].controllato=1;
    }
    else
    {
    territorio[rsorg][csorg-1].controllato=1;
    territorio[rsorg][csorg-1].minore=0;
    }
    if(territorio[rsorg][csorg].altezza >= territorio[rsorg][csorg+1].altezza)
    {
    territorio[rsorg][csorg+1].minore=1;
    territorio[rsorg][csorg+1].controllato=1;
    }
    else
    {
    territorio[rsorg][csorg+1].controllato=1;
    territorio[rsorg][csorg+1].minore=0;
    }
    if(territorio[rsorg][csorg].altezza >= territorio[rsorg+1][csorg-1].altezza)
    {
    territorio[rsorg+1][csorg-1].minore=1;
    territorio[rsorg+1][csorg-1].controllato=1;
    }
    else
    {
    territorio[rsorg+1][csorg-1].controllato=1;
    territorio[rsorg+1][csorg-1].minore=0;
    }
    if(territorio[rsorg][csorg].altezza >= territorio[rsorg+1][csorg].altezza)
    {
    territorio[rsorg+1][csorg].minore=1;
    territorio[rsorg+1][csorg].controllato=1;
    }
    else
    {
    territorio[rsorg+1][csorg].controllato=1;
    territorio[rsorg+1][csorg].minore=0;
    }
    if(territorio[rsorg][csorg].altezza >= territorio[rsorg+1][csorg+1].altezza)
    {
    territorio[rsorg+1][csorg+1].minore=1;
    territorio[rsorg+1][csorg+1].controllato=1;
    }
    else
    {
    territorio[rsorg+1][csorg+1].controllato=1;
    territorio[rsorg+1][csorg+1].minore=0;
    }
    //FINE CONTROLLO INTORNO ALLA SORGENTE


    }




    void allagamento(casella territorio[MAX][MAX],int righe,int colonne){
    int i,j,a,b,casellaminore=0,casellaminore2=0,rsorg,cso rg,noncontrollato;
    cout<<"dammi i metri di lunghezza dai quali parte la sorgente";
    cin>>rsorg;
    cout<<"dammi i metri di larghezza dai quali parte la sorgente";
    cin>>csorg;


    do{
    noncontrollato=0;
    controllocircostante(territorio,righe,colonne,rsor g,csorg);
    //CONTROLLO RICERCA MINORE
    for(i=casellaminore;i<righe;i++){
    for(j=casellaminore2;j<colonne;j++){
    if(territorio[i][j].minore){
    rsorg=i;
    csorg=j;
    casellaminore=i;
    casellaminore2=j;
    controllocircostante(territorio,righe,colonne,rsor g,csorg);
    }
    }
    }
    //CONTROLLO RICERCA CONTROLLATO
    for(a=0;a<righe;a++){
    for(b=0;b<colonne;b++){
    if(territorio[a][b].controllato=0)
    noncontrollato=1;
    }
    }
    }while(noncontrollato);
    }


    void visualizza(casella territorio[][MAX],int righe,int colonne){
    int i,j;
    for(i=0;i<righe;i++){
    cout<<"\n";
    for(j=0;j<colonne;j++){
    if(territorio[i][j].minore){
    cout<<"#"<<territorio[i][j].altezza;
    }else{
    cout<<"*"<<territorio[i][j].altezza;
    }
    }
    }
    }


    int main(){
    int righe,colonne;
    struct casella territorio[MAX][MAX];
    //ACQUISIZIONE PERIMETRO
    do
    {
    cout<<"dammi il numero di metri di lunghezza di territorio che vuoi analizzare";
    cin>>righe;
    }
    while(righe<0);
    do
    {
    cout<<"dammi il numero di metri di larghezza di territorio che vuoi analizzare";
    cin>>colonne;
    }
    while(colonne<0);
    //ACQUISIZIONE MATRICE E CONTROLLI
    acquisisciterritorio(territorio,righe,colonne);
    //ALGORITMO
    allagamento(territorio,righe,colonne);
    //VISUALIZZA
    visualizza(territorio,righe,colonne);
    }
    Ultima modifica di elbaro; 18-02-2016 a 14:04

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.