Author Topic: Domande su c++ inerenti al celeberrimo software di zax2010  (Read 16650 times)

0 Members and 1 Guest are viewing this topic.

Offline marchionili

  • Novizio del forum
  • *
  • Posts: 38
  • Karma: 0
  • Novizio
Re: Domande su c++ inerenti al celeberrimo software di zax2010
« Reply #15 on: 17 December , 2011, 16:00:34 PM »
Aggiungo: esistono dei file xml già pronti e solo da ritoccare opportunamente come avviene per i template sul web?

esempio: http://www.freewebsitetemplates.com/

http://www.freewebsitetemplates.com/download/bikersclubtemplate

ciao e grazie

Offline marchionili

  • Novizio del forum
  • *
  • Posts: 38
  • Karma: 0
  • Novizio
Re: Domande su c++ inerenti al celeberrimo software di zax2010
« Reply #16 on: 18 December , 2011, 15:04:53 PM »
up! up! up!

Offline Gilean

  • Administrator
  • Bisnonno Veterano
  • *****
  • Posts: 3292
  • Karma: 202
Re: Domande su c++ inerenti al celeberrimo software di zax2010
« Reply #17 on: 19 December , 2011, 19:11:16 PM »
che io sappia no.
Il calcolo è come la pelle delle @@, lo tiri dove vuoi tu.
Esempio di programmazione a Loop:
L'enunciato che segue è falso
L'enunciato precedente è vero.

Nonostante la consapevolezza dei rischi che si corrono dopo aver visto le prestazioni da 3° dan

Offline marchionili

  • Novizio del forum
  • *
  • Posts: 38
  • Karma: 0
  • Novizio
Re: Domande su c++ inerenti al celeberrimo software di zax2010
« Reply #18 on: 19 December , 2011, 21:32:25 PM »
Questa sera ho incominciato a leggere il secondo file ma già alla prima riga mi sono dovuto fermare. Ho trovato le seguenti righe di codice:

#include "ver_SLU_SLE.h"
#include "math.h"

Se "#include" serve per includere un altro file nel codice allora deduco che nella mia cartella decompressa dovrei trovare il file math.h ma io non lo vedo, perché?

P.S.:Quali sono i vantaggi nell'usare le WPF e i fogli xml oltre ad una personalizzazione grafica più evoluta?

Grazie
« Last Edit: 19 December , 2011, 22:15:48 PM by marchionili »

Offline Gilean

  • Administrator
  • Bisnonno Veterano
  • *****
  • Posts: 3292
  • Karma: 202
Re: Domande su c++ inerenti al celeberrimo software di zax2010
« Reply #19 on: 20 December , 2011, 09:33:18 AM »
gli include ti permettono di includere librerie di funzioni o intere classi. Il fatto che tu non le veda nel tuo progetto non significa che debbano per forza esserci. Ti ricordo che tu stai scrivendo un programma appoggiandoti alle Framework.net, che non sono altro che librerie di classi. Di conseguenza con una chiamata simile, stai includendo una libreria che si trova all'interno delle framework.

sul p.s. personalmente non ho mai usato le wpf, mi trovo bene con windows form, quindi non saprei dirti.
Il calcolo è come la pelle delle @@, lo tiri dove vuoi tu.
Esempio di programmazione a Loop:
L'enunciato che segue è falso
L'enunciato precedente è vero.

Nonostante la consapevolezza dei rischi che si corrono dopo aver visto le prestazioni da 3° dan

zax2010

  • Guest
Re: Domande su c++ inerenti al celeberrimo software di zax2010
« Reply #20 on: 20 December , 2011, 09:56:59 AM »
Gilean dice bene.
Ma precisiamo meglio.

Hai intuito bene pensando che il comando #include (una direttiva del pre-processore) serva ad 'infilare' il contenuto di ver_SLU_SLE.h all'interno di un altro listato.

Che tu non trovi tutti i file che ti aspetti è dovuto al fatto che alcuni include file fanno parte della dotazione standard di ogni compilatore c.
Se guardi bene nella directory di installazione del tuo compilatore troverai due directory, la prima include, la seconda lib. Poi se guardi dentro la prima, troverai proprio il math.h che pare mancarti, ed infine nella seconda troverai infine un file math.lib.

Quest'ultimo è forse per te un concetto nuovo. Si tratta di un file al cui interno sono contenuti non i sorgenti, ma un pre-compilato di una serie di funzioni.
Il compilatore (o meglio il linker) è in grado di estrarre dal file .lib la funzione che gli serve, senza dover ogni volta compilare un eventuale listato 'esplicito'.

Ad esempio il file da include math.h in questione è necessario perchè tra le varie righe si va a chiamare una funzione sqrt() (estrazione della radice quadrata), che appunto è una funzione di libreria contenuta nel file math.lib

Piccola digressione. Il successo del C (e dei suoi successivi derivati) è dovuto in parte al piccolo numero di 'parole chiave' che costituiscono il linguaggio in se (20-25 non di più), che ne rendono agevole l'apprendimento.
Ma la vera idea geniale (per quei tempi, ovviamente - stiamo parlando della metà degli anni '70, ovvero 35 anni fa, che in informatica sono ere geologiche), fu quella di 'staccare' la parte 'logica' del linguaggio dalla parte input/output più legata ai sistemi operativi. In questo modo il linguaggio rimane sostanzialmente sempre lo stesso, in qualsiasi sistema operativo esso venga implementato. Sono le funzioni di libreria standard, che tu programmatore 'finale' ti trovi belle e pronte, che eventualmente vengono specializzate in funzione del sistema operativo, della macchina, ecc.

Ad esempio, all'interno di math.lib trovi la funzione fabs(), che restituisce il valore assoluto di un numero float.
Ora, io immagino che una tale funzione operi a livello di bit. Ovvero dato un numero non fa altro che azzerare il bit che indica il segno del numero. Immagino sempre (perchè in effetti non lo so bene) che ci possano essere sistemi in cui il segno meno venga definito da un bit settato a 0, oppure ad 1, e sistemi in cui il bit del segno è il primo bit del numero, oppure l'ultimo.
Ecco in questo caso, il mio programma chiama la funzione fabs(), e non mi importa nulla di come la funzione funziona al suo interno (è quella che gli americani chiamano black-box), sarà il programmatore che ha 'personalizzato' la funzione per un dato sistema a conoscere i dettagli dell'implementazione. Ed il mio listato potrà essere implementato in una macchina unix o dos o cos'altro vuoi senza modifiche.

Offline marchionili

  • Novizio del forum
  • *
  • Posts: 38
  • Karma: 0
  • Novizio
Re: Domande su c++ inerenti al celeberrimo software di zax2010
« Reply #21 on: 21 December , 2011, 22:16:35 PM »
Grazie di tutto. Ho provato a creare un nuovo progetto in C++ per vedere questo file math.h ma ottengo questo errore:

Libreria non registrata. (Eccezione da HRESULT: 0x8002801D (TYPE_E_LIBNOTREGISTERED))."

Sarà un problema del mio programma? Sto usando la versione 2010 ultimate... mah... molto strano... C# parte e funziona ma C++ no...  :byebye:

Sto leggendo il codice e sono alla prima funzione (spero nelle vacanze di andare un po' più in fretta...) ovvero quella che calcola le caratteristiche della funzione e comincio ad addentrarmi nella parte di calcolo e meno informatica e questo in parte mi rallegra ma ho delle piccole domandine che non capisco.

1) Perché dopo l'asterisco c'é la variabile polic e non si trova:

struct    poligono_sezione    *   polic

dentro la funzione calcola_caratt_geometriche?

2) Si azzerano tutte le variabili geo perché altrimenti C++ da a loro un valore casuale come C#?

3) Perché nel ciclo for polic[np].numv é usato senza essere prima definito? perché l'assegnazione é fatta in una funzione che gira dopo [   struct deform verifica_SLE(struct soll_esterne soll)   ]?

4) Perché si moltiplicano i mattoncini delle aree per il coefficiente di omogeneizzazione? :mmm:

grazie e buone feste a tutti!

P.S.: X zax2010 e Gilen: Sul mio skype ho aggiunto un certo zax2010, il mio nome skype e marchionili, aggiungetemi per favore così qualche sera ci si conosce!
« Last Edit: 21 December , 2011, 23:37:47 PM by marchionili »

zax2010

  • Guest
Re: Domande su c++ inerenti al celeberrimo software di zax2010
« Reply #22 on: 22 December , 2011, 00:25:57 AM »
Un plauso alla tua caparbietà.
E' per questo che continuerò a risponderti, anche se il suggerimento di Alex_Drake di munirti di un buon manuale, sia meglio di brancolare nel buoi come fai tu.

Facciamo un esempio.
Per prima cosa guarda questo prototipo di funzione:

Code: [Select]
float perimetro (float,float);
Tradotto in parole significa che questa funzione accetta in ingresso due numeri in virgola mobile, e restituisce un numero in virgola mobile. Il fatto che si chiami perimetro ti fa intuire cosa essa debba calcolare. Infatti, andiamo al corpo della funzione vera e propria:

Code: [Select]
float perimetro (float lato1,float lato2)
{
 float perim;
 
 perim=2*(lato1+lato2);

 return (perim);
}

Nulla di complicato mi pare. Se poi dici che con la parte più 'aritmetica' del linguaggio te la cavi qui la cosa è semplicissima.

Vediamo però un pezzettino di codice in cui tu utilizzerai la funzione appena creata:

Code: [Select]
.
.
.
a=10.0; b=20.0;
c=perimetro(a,b);
.
.
.

Ho inizializzato le variabili a e b, tanto per fare, esse deriveranno da quello che vuoi tu, un input esplicito da parte dell'utilizzatore del programma, da formule e calcoli più sofisticati, ecc.

Ciò che dovresti notare è come le variabili del 'corpo' della funzione e le variabili della 'chiamata' alla funzione abbiano nomi differenti (lato1 e lato2 nel primo caso, e a e b nel secondo).

L'ho fatto apposta, perchè in effetti quando chiami la tua funzione, i valori numerici contenuti in a e b vengono copiati rispettivamente nei valori numerici delle variabili lato1 e lato2 che di fatto risultano 'dichiarate' proprio nella 'dichiarazione' della funzione. Ecco perchè tu non hai più bisogno di dichiarare tali variabili all'interno della funzione stessa, ed ecco perchè la funzione può utilizzare le variabili lato1 e lato2 al suo interno come meglio gli aggrada.

Altro fatto di notevole importanza è che lo 'sdoppiamento' delle variabili ti consentirebbe, ad esempio, all'interno della funzione perimetro di modificare i valori di lato1 e lato2 come meglio ti aggrada (nell'esempio che ti ho fatto questo non accade), senza che questo interferisca con i valori effettivi delle variabili a e b.
Ad esempio se a e b derivano da input dell'utente, chi ti dice che per sbaglio uno dei due non sia negativo? E' ovvio che in quel caso il calcolo del perimetro non sarà corretto. Ma se tu riscrivessi la funzione perimetro così:

Code: [Select]
float perimetro (float lato1,float lato2)
{
 float perim;
 
 lato1=fabs(lato1);
 lato2=fabs(lato2);

 perim=2*(lato1+lato2);

 return (perim);
}

Ecco che il calcolo sarebbe corretto, perchè forzeresti lato1 e lato2 ad essere per forza positivi (ok, ho fatto un pò di brodo inutile, ma è un esempio e dovrebbe servire a farti capire). Ma le variabili a e b inserite dall'utente nel frattempo sono rimaste del segno che il malcapitato utente gli ha assegnato.

La tua seconda domanda contiene già la risposta. Si azzerano perchè altrimenti avrebbero valore casuale (secondo lo standard ANSI C questo comportamento è indefinito e dipende dalla implementazione del particolare compilatore. Esistono compilatori che dichiarando una variabile automaticamente la azzerano, altri che invece non lo fanno. Il buon programmatore o compila sempre con un compilare ben preciso, oppure si mette il ferro dietro la porta azzerando sempre prima le variabili, specie se come nella funzione che segnali, al valore finale delle singole variabili si arriva per sommatorie successive).
La domanda 3 mi pare un ripetizione della domanda 1.

Infine non sono su Skype come zax2010, per cui non saprei chi tu abbia trovato.
Domani mi cerco. Voglio vedere chi sono!

Offline marchionili

  • Novizio del forum
  • *
  • Posts: 38
  • Karma: 0
  • Novizio
Re: Domande su c++ inerenti al celeberrimo software di zax2010
« Reply #23 on: 24 December , 2011, 17:36:53 PM »
Grazie zax, ora capisco tutto. Dato che polic é un puntatore della variabile struct poligono_sezione e quest'ultima é già stata definita nel file .h allora numv é definito ed il fatto che non venga settata come area é dovuto al fatto che numv é una variabile di input assegnata dall'utente volta per volta. Cio mi fa pensare che oltre alle coordinate bisogni dire al programma quanti numeri di vertici si sono decisi di definire ma questo lo vedro/capirò più avanti. Una cosa che però proprio non riesco a comprendere é per quale ragione moltiplichi il mattoncino delle aree per il coefficiente di omogeneizzazione...  :( Semai bisognerebbe moltiplicare le aree delle armature per il coefficiente di omegeneizzazione che se non ricordo male dovrebbe valere 15...  :( Non é che omog vale 1 ed inizialmente il prog era stato pensato per risolvere sezioni miste acciao e calcestruzzo? ...

 :byebye:
« Last Edit: 24 December , 2011, 18:14:24 PM by marchionili »

zax2010

  • Guest
Re: Domande su c++ inerenti al celeberrimo software di zax2010
« Reply #24 on: 24 December , 2011, 19:42:05 PM »
Nel topic sulle sezioni generiche e relative verifiche a presso-flessione, avevo spiegato il motivo dell'introduzione di 'omog'.

Capisco che il topic è lungo e leggerlo tutto è una fatica.

A parte le sezioni miste acciaio-calcestruzzo, esisterebbero le sezioni miste calcestruzzo-calcestruzzo, con calcestruzzi di resistenza differente. Nel topic avevo anche parlato di vuoti all'interno della sezione, ovvero altri contorni a cui semplicemente assegnare una variabile 'omog' pari a -1.
Insomma i casi possono essere molteplici.

Riguardo numv, certamente. Essa è un input 'esplicito' dell'utente (come in VCASLU dove inizialmente dici che il poligono costituente la sezione ha xx vertici, e ti 'spunta' una tabella di inserimento coordinate di vertici proprio di xx righe), oppure in qualche modo 'trovato' dal programma (perchè in una tabella da 100 righe riempi solamente le prime 10, oppure perchè hai disegnato un poligono ed i vertici sono....quelli che sono).

Offline marchionili

  • Novizio del forum
  • *
  • Posts: 38
  • Karma: 0
  • Novizio
Re: Domande su c++ inerenti al celeberrimo software di zax2010
« Reply #25 on: 27 December , 2011, 00:03:14 AM »
Ok, grazie mille. Sempre chiaro come sempre. Ho letto la prima parte del tuo primo tread e ti faccio i complimenti per l'algoritmo: davvero geniale!  :inchino: L'unica formula che non sono riuscito a dimostrare é quella usata per il calcolo del momento centripeto. A me risulta 2*(d^2)/9 invece di (d^2)/4...  :help:

Ixy = a*y*(a/2+x)*y/2+a*d/2*(x+2/3*a)*(y+1/3*d) ... da qui si arriva alla tua formula ma con la parte 2*(d^2)/9 al posto della tua...  ??? Ho pure confrontato il tuo algoritmo con quello di un altro programma e confermo la correttezza della tua formulazione... ma dove cavolo sbaglio!!!  :leggo:

zax2010

  • Guest
Re: Domande su c++ inerenti al celeberrimo software di zax2010
« Reply #26 on: 27 December , 2011, 19:54:50 PM »
Il momento centrifugo di un rettangolo, quando questo ha i lati paralleli agli assi coordinati è:

Jxy-rett=xg*yg*Area

(la formula generica sarebbe: Jxy=Jxgyg+xg*yg*Area - dove Jx0y0 sarebbe il momento centrifugo di una qualsiasi figura rispetto ad assi baricentrici, ma poichè nel caso specifico gli assi coordinati sono anche assi principali del rettangolo Jxgyg=0).

Invece per un triangolo con base parallela agli assi coordinati il momento centrifugo rispetto al baricentro vale: -a^2*d^2/72 (trovato in una dispensa on-line, in teoria si dovrebbe fare l'integrale doppio).

Pertanto il momento centrifugo del triangolo sarebbe: Jxy-triang=Jxgyg+xg*yg*area.
A questo punto sommando i due termini, componendo, sostituendo, ecc. si dovrebbe arrivare alla formula di cui al topic.
Dimmi intanto se anche tu stai procedendo allo stesso modo (ho utilizzato la stessa simbologia a-d del topic).

Io ho perso 2 ore oggi a far di conto, ma c'è qualcosa che non mi torna. Qualche segno sbagliato, qualche semplificazione di troppo ecc. Vedremo.



zax2010

  • Guest
Re: Domande su c++ inerenti al celeberrimo software di zax2010
« Reply #27 on: 27 December , 2011, 20:21:14 PM »
Risolto l'arcano.
Il momento centrifugo del triangolo rispetto agli assi baricentrici paralleli alla sua base non è come dicevo prima -a^2*d^2/72!!
Semplicemente non ha il segno negativo.

Infatti se segui tutto lo sviluppo che allego, si arriva alla formula voluta.

Ovviamente mi dirai se c'è qualcosa che non ti convince.





P.S.: Qualsiasi Zax tu abbia trovato su Skype non sono io.

Offline marchionili

  • Novizio del forum
  • *
  • Posts: 38
  • Karma: 0
  • Novizio
Re: Domande su c++ inerenti al celeberrimo software di zax2010
« Reply #28 on: 27 December , 2011, 22:52:00 PM »
Supremo, grandioso, indiscutibile, indistruttibile e memorabile.  :clap: Grazie zax!  :clap: Ora mi é tutto più chiaro! Jxy assume sia il segno positivo che negativo a seconda dei casi. Quando P2 ha un'ordinata superiore rispetto a P1 il problema non si pone mentre quando si verifica l'opposto il triangolo che si considera nella formula e che concorre al calcolo di Jxy(P1-P2) é quello che non compone la figura sottesa dal lato P1-P2. Siccome la casistica impone il cambiamento del segno di Jxy la definizione della sommatoria dei pezzetti che compongono la figura é corretta. Detto in breve Jxy ha sia segno positivo che negativo, dipende dal caso che consideri.

Ciao e grazie ancora

 :clap:  :clap:  :clap:

Offline marchionili

  • Novizio del forum
  • *
  • Posts: 38
  • Karma: 0
  • Novizio
Re: Domande su c++ inerenti al celeberrimo software di zax2010
« Reply #29 on: 27 December , 2011, 23:49:54 PM »
Conviene aggiungere qualche cifra:

Code: [Select]
/* Inclinazione degli assi principali d'inerzia rispetto agli assi X,Y di riferimento */
 if (geo.ix-geo.iy!=0)   geo.alfa=atan(-2*geo.ixy/(geo.ix-geo.iy))/2;
 else { if (geo.ixy>0.0) geo.alfa=-0,785398163397448; else geo.alfa=0,785398163397448; }
 if (geo.ix<geo.iy)      geo.alfa+=1,5707963267949;

Meglio sarebbe scrivere il valore proposto da math.h però non so se esiste e come si scrive... su excel basta scrivere =pi.greco()/2.
« Last Edit: 28 December , 2011, 13:23:05 PM by marchionili »

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24