Punto informatico Network
Login Esegui login | Non sei registrato? Iscriviti ora (è gratuito!)
Username: Password:
  • Annuncio Pubblicitario

C# sviluppo del turno in monthCalendar

Il forum per tutti i developer. Leggere attentamente il regolamento di sezione prima di postare.

C# sviluppo del turno in monthCalendar

Messaggioda thread.net » dom feb 10, 2008 4:01 pm

Ciao a tutti

Ho 35 anni sono appassionato di informatica ed ho iniziato ad interessarmi di programmazione da poco tempo e ho pensato di chiedere un aiuto a Voi del Forum..

Mi interessa in particolare il C#.

Questo e' il programmino che vorrei creare:

Ho creato una form con C# e vi ho messo un calendario di tipo monthCalendar + una textbox.

vorrei visualizzare nella text box alcuni eventi dopo che si e' cliccato sui controlli (giorni) del calendario.
Mi spiego meglio : io ho un turno di 22 giorni che si ripete nel tempo di questo tipo:

m/m-n/s/r/m/m/p/p..../..../...../.../r. (TOT 22)

dove m sta per mattina, n per notte , p per pomeriggio,ecc...

il tutto si ripete dal 23esimo giorno in poi per altri 22 giorni, e cosi' via.



Ora il problema e' come impostare il ciclo in c# e come "trasferirlo" nel calendario . Io vorrei che ad esempio cliccando su un giorno di un anno futuro
ad es.(1/1/2012) mi compaia nella textBox quale turno faccio di quelli descritti sopra e se e' possibile anche in maniera retroattiva(anni precedenti al 2008).....

Spero in qualche dritta!!!!
Ciao e grazie per la cordialita'....
Avatar utente
thread.net
Aficionado
Aficionado
 
Messaggi: 62
Iscritto il: sab giu 23, 2007 8:07 pm

Messaggioda Silver Black » dom feb 10, 2008 6:08 pm

La sequenza (m-m) comincia il primo del mese?
Sergio Pappalardo aka Silver Black
https://www.silvercybertech.com
Avatar utente
Silver Black
Silver Member
Silver Member
 
Messaggi: 1148
Iscritto il: gio gen 06, 2005 8:50 pm
Località: Italia

Messaggioda thread.net » dom feb 10, 2008 7:13 pm

No e' iniziato nel 2007 (non ricordo la data precisa) ma per me va benissimo una data qualunque.
In fase di sviluppo inseriro' la data giusta.
L'importante e' che il tutto venga "ciclato" correttamente.
Ho qualche idea ma non te la dico che e' meglio......
Bye
Avatar utente
thread.net
Aficionado
Aficionado
 
Messaggi: 62
Iscritto il: sab giu 23, 2007 8:07 pm


Messaggioda Silver Black » dom feb 10, 2008 7:42 pm

Il programma deve sapere a cosa corrisponde un dato giorno. Un po' mi sembra di avere capito cosa vuoi tu, ma per implementarlo bisogna capire da dove il programma deve partire con il tuo ciclo di turni, es. se parti dal 1° gennaio 2007.

In questo modo puoi creare un array di dimensioni = numero di giorni trascorsi dal 1° gennaio 2007 al giorno in cui si è cliccato, inizializzerai ogni cella del tuo array immettendo il turno esatto, poi dopo ogni 22 posizioni ricominci il ciclo, questo per tutto l'array (si può ottimizzare l'algoritmo per fare questa inizializzazione a inizio applicazione una volta per tutte, ponendo come limite un paio d'anni dopo il 2007, ad esempio, in modo che all'utente non capiti di cliccare dove il programma non ha ancora calcolato il turno).

Per inizializzare l'array utilizzerei un ciclo for per scorrerlo da cima a fondo e un altro ciclo for a partire dall'indice dell'altro facendo però un "mod 22" per calcolare l'indice della cella da cui prendere il turno, in modo che il ciclo si ripeta sempre, dopodichè farei vetGiorni[i] := vetTurni[j] dove j = i mod 22.
Ovviamente il vettore dei turni lo inizializzi a mano nelle sue 22 posizioni, non c'è altro modo.

Prova a scrivere adesso tu il codice!
Sergio Pappalardo aka Silver Black
https://www.silvercybertech.com
Avatar utente
Silver Black
Silver Member
Silver Member
 
Messaggi: 1148
Iscritto il: gio gen 06, 2005 8:50 pm
Località: Italia

Messaggioda thread.net » dom feb 10, 2008 8:22 pm

io per adesso ho scritto questo codice:

private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e)
{

string[] Turni = new string[] { "mattina", "poneriggio", "mattina-notte", "notte", "riposo", "pomeriggio", "mattina", "smonto" };
this.textBox2.Text =
monthCalendar1.SelectionRange.End.Date.ToShortDateString() + " " + Turni;

}


pero' mi da in esecuzione "System.String ()" dopo la data anziche il turno.
E' tutto quello che sono riuscito a fare.
PUNTO PRIMO : dici di creare un array di giorni a partire dal 1 gennaio fino ad oggi
Pensavo di mettere uno startDate cosi' :

monthCalendar1.SelectionRange.Start.Date = 01/01/2007
e poi un comando che rilevi il giorno cliccato, faccia la conta dei giorni e divida per 22...

E' possibile creare un array in questo modo???

PUNTO 2 :cos'e' un mod 22?

PUNTO 3:

for (int i=0; i>startDate; i++) ; (o qualcosa di simile...)

E' un ciclo valido?


Vabe' non ti voglio annoiare troppo ..Vedi quello che puoi fare per aiutarmi....
Ciao e Grazie
Ps scusa per le inesattezze ma mi sono beccato un influenza tosta e sragiono un po'....Bye
Avatar utente
thread.net
Aficionado
Aficionado
 
Messaggi: 62
Iscritto il: sab giu 23, 2007 8:07 pm

Messaggioda KeyroEvolution » lun feb 11, 2008 11:17 am

thread.net ha scritto: PUNTO 2 :cos'e' un mod 22?


Oh mio dio.
Il mod e` "la quinta operazione" per un informatico e data la divisione tra due numeri, mod restituisce il resto.

esempio : 5 mod 4 = 25 (1,25)

E` fondamentale sapere questo operatore. Il nostro silver black lo conosce molto bene. Il mod lo trovi anche su applicazioni matematiche come in trigonometria. Il calcolo degli angoli come radianti. In una circonferenza posso essere effettuati piu` giri e per intendere piu` giri si usa mod.
Per cui l'algoritmo che propone silver black e` assolutamente perfetto.

thread.net ha scritto:for (int i=0; i>startDate; i++) ; (o qualcosa di simile...)


No.
Tu stai dicendo al programma di partire da 0 e incrementare la tua variabile i fino a che e` vero che i e` maggiore di startDate per cui il ciclo non sara` mai eseguito ( a meno che i non sia minore di startDate ma in questo sara` un ciclo infinito ).
In un ciclo for, il ciclo viene ripetuto finche e` vera la condizione, per cui la corretta interpretazione e` :

for (int i=0; i<startDate; i++) ;
Avatar utente
KeyroEvolution
Senior Member
Senior Member
 
Messaggi: 311
Iscritto il: dom gen 20, 2008 3:12 pm
Località: Padova!

Messaggioda Silver Black » lun feb 11, 2008 11:42 am

thread.net ha scritto: string[] Turni = new string[] { "mattina", "poneriggio", "mattina-notte", "notte", "riposo", "pomeriggio", "mattina", "smonto" };


Ma i turni non erano 22?


e poi un comando che rilevi il giorno cliccato, faccia la conta dei giorni e divida per 22...


Non c'entra niente dividere per 22... [...]


for (int i=0; i>startDate; i++) ; (o qualcosa di simile...)

E' un ciclo valido?


Non ci sono cicli validi o non validi, ci sono solo cicli che fanno quello che serve a te! [fischio] Il ciclo va fatto dalla posizione iniziale (0) dell'array di giorni fino alla posizione finale.

Diciamo che tu ti fai l'array così:

vetGiorni[0, <numero giorni dal 1/1/2007 fino al giorno cliccato>]

oppure

vetGiorni[0, <numero giorni dal 1/1/2007 fino a 5 anni successivi>]

Poi hai i tuoi turni, poniamo i 22 che avevi detto:

vetTurni[0] := <turno1>;
vetTurni[1] := <turno2>;
vetTurni[2] := <turno3>;
...

Poi inizializzi il vetGiorni con il turno appropriato:

for i := 0 to Length(vetGiorni) do begin
vetTurnio[i] := vetTurni[i mod <max numero di turni>];
end;

Inizializzato l'array, quando l'array clicca su millesimo giorno, ad esempio, potrai fare vetTurni[1000] e avere subito il turno appropriato.

Tutto qua, ho anche eliminato il secondo ciclo for, che ho visto non c'entrava. Così dovrebbe funzionare, adesso sta a te tradurre lo pseudo-codice Delphi che ho scritto nel tuo codice.
Sergio Pappalardo aka Silver Black
https://www.silvercybertech.com
Avatar utente
Silver Black
Silver Member
Silver Member
 
Messaggi: 1148
Iscritto il: gio gen 06, 2005 8:50 pm
Località: Italia

Messaggioda M@ttia » lun feb 11, 2008 11:46 am

KeyroEvolution ha scritto:esempio : 5 mod 4 = 25 (1,25)


Ehm, non farebbe 1? [fischio]
</IE><FIREFOX>
Avatar utente
M@ttia
Moderatore
Moderatore
 
Messaggi: 8363
Iscritto il: lun giu 09, 2003 2:18 pm
Località: Ticino - Estero

Messaggioda thread.net » lun feb 11, 2008 12:38 pm

Be ragazzi siete assolutamente grandi... vi faro' sapere.

p.s. si i turni sono 22 ma ho fatto la prova con 8, cosi' per sfizio...
bye
Avatar utente
thread.net
Aficionado
Aficionado
 
Messaggi: 62
Iscritto il: sab giu 23, 2007 8:07 pm

Messaggioda KeyroEvolution » lun feb 11, 2008 2:29 pm

M@ttia ha scritto:
KeyroEvolution ha scritto:esempio : 5 mod 4 = 25 (1,25)


Ehm, non farebbe 1? [fischio]


mmm da il resto della divisione, non il quoziente. [fischio]
Avatar utente
KeyroEvolution
Senior Member
Senior Member
 
Messaggi: 311
Iscritto il: dom gen 20, 2008 3:12 pm
Località: Padova!

Messaggioda M@ttia » lun feb 11, 2008 2:42 pm

Beh appunto, 5 / 4 = 1 con resto 1...

Io il mod lo uso da sempre in VB (scritto MOD) e in C++ (scritto %) e fa appunto quello: "toglie" il secondo numero dal primo finché può, e ti dice quanto ne rimane... (che poi fare "mod k" sarebbe eseguire le operazioni nell'anello Z/kZ matematicamente).

Non capisco proprio cosa centri quell'1.25 (che è il risultato "float" della divisione), troncato dopo la virgola... [boh]


Edit:
Ho capitolo solo ora che il tuo messaggio di prima ammetteva l'errore invece di confermare che fosse giusto, sorry! [:D]
</IE><FIREFOX>
Avatar utente
M@ttia
Moderatore
Moderatore
 
Messaggi: 8363
Iscritto il: lun giu 09, 2003 2:18 pm
Località: Ticino - Estero


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti

Powered by phpBB © 2002, 2005, 2007, 2008 phpBB Group
Traduzione Italiana phpBB.it

megalab.it: testata telematica quotidiana registrata al Tribunale di Cosenza n. 22/09 del 13.08.2009, editore Master New Media S.r.l.; © Copyright 2008 Master New Media S.r.l. a socio unico - P.I. 02947530784. GRUPPO EDIZIONI MASTER Spa Tutti i diritti sono riservati. Per la pubblicità: Master Advertising