Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Progetto C

    Salve a tutti, ho bisogno di una delucidazione sul C, allora praticamente, ho necessità per un programma che sto creando di lavorare su una matrice, il fatto è questo devo creare diverse funzioni che compiano determinate operazioni sulla matrice, ad esempio ruotarla di 90 °, spegnere tutti gli elementi, ma il mio problema è questo.
    Questa matrice deve rimanere in memoria per ogni operazione, ossia se precedentemente l 'ho ruotata di 90 ° questo deve comparire nel momento in cui la richiamo per una successiva operazione.
    Come faccio a tenere in memoria una matrice ??
    Devo usare i puntatori ?

    Grazie a chiunque mi risponda.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Non ho capito cosa intendi ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    MI spiego meglio, nel mio programma devo manipolare una matrice.

    Se inserisco
    n 4
    il comando n viene interpretato come disegna una matrice 4*4.
    poi se inserisco r 4 5
    il comando viene interpretato come ruota la matrice di 90° a destra a partire dalle coordinate riga = 4 e colonna 5.
    Il fatto è che lo devo fare sulla matrice che ho realizzato con il comando precedente.
    Quindi ho bisogno di sapere come fare a memorizzare una matrice o perlomeno a passarla a tutte le funzioni che operano su di essa.

    Se non è ancora chiaro ti posto la consegna.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Non sai come memorizzare una matrice (cioè come crearla ? ) ... ovviamente dovrai crearla in maniera "dinamica". Alla fine avrai un puntatore doppio da passare alle tue funzioni ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Ascolta ti posto un secondo la consegna....

    Se mi dai una mano te ne sarò eternamente grato.

    Obiettivo del progetto è realizzare un interprete per un semplice linguaggio di manipolazione di immagini monocromatiche
    rappresentate tramite matrici di caratteri.
    Iniziamo con qualche semplice definizione. Un pixel è un elemento di immagine che può trovarsi di volta in volta in uno di
    due possibili stati: acceso o spento. Una bitmap di dimensione n > 0 è una matrice di nn pixel; chiameremo coordinate del
    pixel nella riga r e colonna c di una bitmap la coppia di indici (r;c) (dove sia le righe che le colonne sono numerate a partire da
    0). Una figura è data da un insieme finito di coordinate, alcuni esempi sono:
     il segmento verticale di dimensione h con coordinate (r;c), dato dall’insieme f(r;c); (r+1;c); : : : ; (r+h􀀀1;c)g,
     il segmento orizzontale di dimensione l con coordinate (r;c), dato dall’insieme f(r;c); (r;c+1); : : : ; (r;c+l􀀀1)g,
     il rettangolo di dimensioni l h con coordinate (r;c), dato dall’unione dei quattro segmenti: due verticali di dimensione
    h e coordinate (r;c) e (r;c+l􀀀1) e due orizzontali di dimensione l con coordinate (r;c) e (r+h􀀀1;c),
     il timbro della matrice1 A = (ai; j) con coordinate (r;c), dato dall’insieme f(r+i;c+ j) j ai; j 6= 0g.
    Data una bitmap e una figura, disegnare la figura nella bitmap significa accendere i pixel della bitmap corrispondenti alle
    coordinate della figura (eventualmente ignorando le coordinate cui non corrispondono pixel della bitmap). In particolare, il
    disegno del timbro della matrice A con coordinate (r;c) può essere definito informalmente come segue: per prima cosa si
    “sovrappone” la matrice A alla bitmap in modo che l’elemento di riga 0 e colonna 0 della matrice si trovi “sopra” il pixel di
    coordinate (r;c) della bitmap, quindi si accendono i pixel della bitmap che si trovano “sotto” gli elementi non nulli della matrice.
    Concludiamo l’introduzione osservando come una bitmap di dimensione n può essere semplicemente raffigurata tramite n
    righe di n caratteri ciascuna in cui il carattere nella colonna c della riga r rappresenti il pixel di coordinate (r;c), adottando la
    convenzione di indicare con uno spazio i pixel spenti e con un asterisco quelli accesi.
    Ad esempio, la raffigurazione seguente corrisponde ad una bitmap di dimensione 4 (con tutti i pixel inizialmente spenti)
    0 1 2 3
    1 * * *
    2 *
    3 *
    in cui sono stati disegnati i segmenti verticali di dimensione 4 e coordinate (0;0) e il segmento orizzontale di dimensione 2
    e coordinate (1;2) (i numeri di riga e colonna nella prima riga e prima colonna della tabella sono riportati solo per facilitare
    la lettura e non fanno parte della raffigurazione della bitmap che è data solo dagli asterischi * e dagli spazi, che qui sono
    rappresentati come per aumentarne la leggibilità).
    1Per uniformità con quanto avviene nelle bitmap, gli indici di riga e colonna delle matrici qui partono da 0.
    1
    I comandi dell’interprete
    L’interprete gestisce una bitmap di dimensioni assegnate ed esegue alcune manipolazioni su di essa tra le quali, ad esempio,
    il disegno di alcune figure. In più, l’interprete gestisce un insieme di matrici (di varie dimensioni) che possono essere usate
    per i timbri; inizialmente tutti gli elementi di tutte le matrici sono nulli. L’interprete inizia l’esecuzione con una bitmap di
    dimensione 1.
    Ogni comando è dato da un nome (costituito da un carattere minuscolo) e, se necessario, da un elenco di uno o più numeri
    interi detti parametri. La Tabella 1 riporta nome e parametri dei comandi dell’interprete. I comandi s e d si possono considerare
    facoltativi.
    Nome Parametri
    n n
    c
    i
    r
    l
    x r c
    o r c
    h l r c
    v h r c
    b h l r c
    p

    Un primo insieme di comandi riguarda direttamente la bitmap. Il comando n con parametro n crea una nuova bitmap di
    dimensione n in cui tutti i pixel sono inizialmente spenti (se era presente una bitmap precedente, essa viene eliminata; se n
    eccede il limite massimo specificato nella sezione seguente, il comando viene ignorato). Il comando c spegne tutti i pixel della
    bitmap, mentre il comando i inverte lo stato dei pixel rendendo accesi quelli spenti e viceversa. I comandi r e l producono una
    rotazione di 90 gradi della bitmap, rispettivamente verso destra e sinistra.
    La manipolazione diretta dei pixel avviene tramite i comandi x e o che, rispettivamente, accendono e spengono il pixel le
    cui coordinate sono specificate dai parametri del comando. Se le coordinate eccedono la dimensione della bitmap, il comando
    sarà ignorato.
    Il disegno di figure è poi ottenuto grazie ai comandi v, h e b che disegnano rispettivamente un segmento verticale, uno
    orizzontale ed un rettangolo con le dimensioni e coordinate specificate dai parametri.
    La gestione dei timbri si basa su due comandi. Il comando s legge nell’m-esima matrice gestita dall’interprete una matrice
    di dimensione rc (le matrici sono numerate da 0); i valori degli elementi della matrice sono specificati, come parametri, per
    riga (ossia: i primi c parametri sono i valori della prima riga, quindi i successivi c parametri quelli della seconda riga e così di
    seguito). Se era già stata letta la matrice m-esima, la nuova matrice letta rimpiazzerà quella precedente. Il comando d disegna il
    timbro dell’m-esima matrice alle coordinate specificate dai parametri. Anche nel caso dei timbri, se i parametri di un comando
    eccedono i limiti stabiliti nella sezione seguente, il comando sarà ignorato.
    L’ultimo comando p produce la raffigurazione a caratteri della bitmap così come illustrato nell’introduzione.
    Formato dell’input/output e vincoli
    L’interprete legge da standard input una sequenza di comandi (coi relativi parametri2) come specificati nella Tabella 1 e, fatta
    esclusione per il comando p, non emette alcun output. Nel caso del comando p l’interprete deve emettere su standard output, per
    ciascuna delle n righe della bitmap, n caratteri scelti tra spazio e asterisco (a seconda dello stato dei pixel nella bitmap) e quindi
    il carattere di “a capo” (ossia, a fronte di una bitmap di dimensione n, un totale di esattamente n(n+1) caratteri, considerando
    anche gli “a capo”). Il programma termina l’esecuzione qualora non ci siano più comandi in input.
    Potete assumere che tutti i parametri siano numeri naturali tali da poter essere rappresentati con variabili di tipo int. Inoltre,
    potete assumere che la dimensione massima della bitmap sia 500 e che vadano gestite al più 50 matrici relative ai timbri,
    ciascuna di dimensione massima pari a 7070.
    2Comandi e parametri sono separati tra loro da uno o più caratteri white-space, ossia caratteri su cui la funzione isspace restituisce un valore non nullo.
    2
    A titolo di esempio, in Figura 1, si riportano quattro esecuzioni dell’interprete dove le parti in grassetto corrispondono a
    quanto il programma legge da standard input, mentre le altre (non in grassetto) a quanto scrive su standard output (e dove, come
    in precedenza, il carattere è usato al posto dello spazio, per aumentare la leggibilità).
     Iniziamo con l’esempio a sinistra che corrisponde al caso illustrato nell’introduzione dove, in una nuova bitmap di dimensione
    4, vengono disegnati i segmenti verticali di dimensione 4 e coordinate (0;0) e il segmento orizzontale di dimensione
    2 e coordinate (1;2).
     Proseguiamo quindi con il secondo esempio, in cui viene illustrato l’uso dei timbri; in particolare, il comando s 0 2 3
    1 0 0 0 2 0 legge nella matrice 0-esima la matrice di dimensione 23 data da
    
    1 0 0
    0 2 0
    
    che viene poi utilizzata per disegnare (grazie ai due comandi d) il timbro di coordinate (0;0) e (2;2).
     Il terzo esempio riguarda alcuni spegnimenti e una inversione. Dapprima viene disegnato un rettanglo e quindi ne viene
    spento lo spigolo in alto a sinistra, quindi vengono spenti gli altri tre spigoli (ma viene stampato solo il risultato finale
    delle tre cancellazioni). Infine, viene invertito lo stato dei pixel.
     L’ultimo esempio riguarda le rotazioni. Per prima cosa viene disegnata una specie di G che poi viene ruotata a destra.
    Tramite una rotazione a sinistra si torna alla figura originale, quindi viene eseguita un’altra rotazione a sinistra.
    1)
    n 4
    v 4 0 0
    h 2 1 2
    p
    *
    * **
    *
    *
    2)
    n 4
    s 0 2 3 1 0 0 0 2 0
    d 0 0 0
    p
    *
    *
    d 0 2 2
    p
    *
    *
    *
    *
    3)
    n 4
    b 3 4 0 0
    p
    ****
    * *
    ****
    o 0 0
    p
    ***
    * *
    ****
    o 0 3
    o 2 0
    o 2 3
    p
    **
    * *
    **
    i
    p
    * *
    **
    * *
    ****

    n 4
    v 4 0 0
    h 4 0 0
    x 1 3
    p
    ****
    * *
    *
    *
    r
    p
    ****
    *
    *
    **
    l
    p
    ****
    * *
    *
    *
    l
    p
    **
    *
    *
    ****

    Si ribadisce nuovamente che il formato dell’input/output deve attenersi strettamente a quanto specificato in questa sezione.
    In mancanza di completa e stretta aderenza alle indicazioni precedenti il progetto non sarà ritenuta valido.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Sì, ma alla fine di questo

    http://lonati.dsi.unimi.it/progtelecom/ascii.pdf

    c'è scritto

    NOTA IMPORTANTE: la realizzazione di questo progetto è una prova d’esame da svolgersi individualmente. I progetti giudicati frutto di collaborazione saranno estromessi d’ufficio dalla valutazione.

    Fai attenzione ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Non voglio che me lo fai tu, ho solo necessità di sapere come memorizzare la matrice, sai siccome il corso si sono ben degnati di farlo quest anno perchè avevano chiuso il corso di laurea e mi sono dovuto imparare il C da solo, almeno qualche cosa la devo per forza chiedere .

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Originariamente inviato da guillermaz
    Non voglio che me lo fai tu, ho solo necessità di sapere come memorizzare la matrice
    E ti ho risposto ... alloca dinamicamente la matrice (usa la malloc per allocare e la free per liberare la memoria alla fine); usa un doppio puntatore per allocare un vettore di puntatori a stringhe del C ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,325

    Moderazione

    Originariamente inviato da guillermaz
    Non voglio che me lo fai tu, ho solo necessità di sapere come memorizzare la matrice
    Ti è stato detto come fare. Il problema però sembra essere un altro: che non fai un tentativo oppure attendi che qualcuno esemplifichi nella pratica o scriva il codice necessario per fare quanto chiedi, e questo non rientra nello spirito del forum.

    Leggi i suggerimenti che ti sono stati dati, e tenta di risolvere l'esercizio: indipendentemente dalle disavventure del corso che hai frequentato, se non sai come fare documentati, e se qualcosa non è chiaro poni domande specifiche in merito, che non siano però le domande definitive del compito, cioè non si tratti di delegare a terzi la risoluzione del problema, che è a tuo carico.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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 © 2024 vBulletin Solutions, Inc. All rights reserved.