numeri triangolari(esame di informatica)

« Older   Newer »
 
  Share  
.
  1.  
    .
    Avatar

    Member

    Group
    Member
    Posts
    206

    Status
    Offline
    salve,sono uno studente di ingegneria meccanica,negato col pc in generale,che purtroppo ha un esame di informatica(elementi di informatica) e non sa come fare...sto studiando da 3 mesi,ho fatto l esame già 2 volte ma niente,non ci capisco niente,per me la programmazione è arabo...io apparte che per fb,youtube e giocarci a poker,il computer non lo uso,e se si blocca sono la tipica persona che lo prende a cazzotti...
    devo programmare in c++,ma poco ci capisco..per favore,questo è l esercizio dell ultimo esame che ho fatto(quello di ottobre,ahimè andato male..cioè mi sono ritirato perchè non avevo idea di come si facesse)



    scrivere un programma,usando la funzione(usarla obbligatoriamente) bool triangolare(unsigned long int n) ,che inserito un numero da tastiera,restituisca 1 se il numero è triangolare,0 se non lo è



    mi dite come si fa???mi scrivete questo programma di questo maledetto esame????mi mancano 2 esami alla lurea,e uno è questo..non vorrei dirlo,ma ho paura di non riuscire a laurearmi per colpa di informatica...maledetto chi lo ha messo nel mio piano di studi....


    per favore aiutatemi,è importantissimo...grazie
     
    Top
    .
  2.  
    .
    Avatar

    Senior Member

    Group
    Staff
    Posts
    10,796

    Status
    Anonymous
    Ciao, solitamente non scriviamo codice bello e pronto ed ho sempre evitato di scrivere qualcosa per un altro (sempre se chi lo richiede non mi mostra del codice). Qui il caso è differente (non farai l'informatico), e capisco la situazione... quindi te lo scrivo, sperando di aver "saldato" i conti con il mio passato e sperando anche di essere in credito (può sempre tornare utile, specie in questo anno).


    Visto che non mi piace consegnare del codice bello e fatto, senza una spiegazione, dico giusto due parole.

    CITAZIONE
    un numero triangolare è un numero poligonale rappresentabile in forma di triangolo, ovvero, preso un insieme con una cardinalità (quantità di elementi) pari al numero in oggetto, è possibile disporre i suoi elementi su una griglia regolare, in modo da formare un triangolo rettangolo isoscele o un triangolo equilatero

    Fortunatamente la formula è molto semplice.



    La funzione che devi scrivere quindi non è altro che una piccola rappresentazione in codice della precedente formula.

    CODICE
    #include<iostream>
    #include<cmath>

    using namespace std;

    bool triangolare(unsigned long int n) {
     double m = (sqrt(8*n+1)-1)/2;
     if(m - ((int)m) == 0) return 0;
     else return 1;
    }

    int main() {
     int n;
     cout << "Inserisci un numero: ";
     cin >> n;
     cout << triangolare(n);
     return 0;
    }


    Non ho nemmeno guardati nell'API, e non ricordo se è presente una funzione che dice se un numero ha virgola o meno, quindi ho scritto quell'if in quel modo. In pratica sottraggo ad m che è un valore double (con virgola mobile a precisione doppia) al valore ((int)m) che è il "cast" del double m in un intero; quindi se m è ad esempio 7.80, dopo il cast sarà 7. Se dalla sottrazione ottengo 0 allora il numero è triangolare, in caso contrario non lo è.

    Per altre info sui numeri triangolari: http://it.wikipedia.org/wiki/Numero_triangolare
     
    Top
    .
  3.  
    .
    Avatar

    Member

    Group
    Member
    Posts
    206

    Status
    Offline
    grazie della risposta,il programma parte alla grande..vorrei chiederti una cosa,questo esame lo dovevo fare senza sapere quella formula,quella m = (sqrt(8*n+1)-1)/2;,quindi mi avevano suggerito di farlo usando la somma,cioè se il numero che inserivo era uguale alla somma dei primi n numeri(ciclo for) allora era truiangolare...come si potrebbe fare un programma del genere?
    ti ringrazio in anticipo,e vedi che a far del bene si guadagna sempre e comunque..ora io non so come posso ripagarti(almeno su questo forum visto che di pc e programmazione ne capisco meno di zero)ma per qualunque cosa,come si dice dalle mie parti,a disposizione......

    grazie
     
    Top
    .
  4.  
    .
    Avatar

    Senior Member

    Group
    Staff
    Posts
    10,796

    Status
    Anonymous
    Si guadagna, ma non è detto che a guadagnarci sia anche chi lo richiede. Se ad esempio ti fossi laureato in informatica, non ti avrei aiutato in questo modo (ovvero facendolo), visto che poi sarebbe uscito un ing. informatico.

    Ma veniamo a noi. Ovviamente si può fare (la questione è più matematica che informatica), in fondo un numero triangolare è dato dalla somma di N numeri.
    Sostituisci la precedente funzione triangolare con questa:
    CODICE
    bool triangolare(unsigned long int n) {
     int sum = 0;
     int i = 1;
     while((sum+=(i++)) < n);
     if(sum == n) return 1;
     else return 0;
    }


    Se non erro il testo dice di restituire 1 se è triangolare, e 0 se non lo è.

    Se preferisci una forma meno compatta:
    CODICE
    bool triangolare(unsigned long int n) {
     int sum = 0;
     int i = 1;
     
     while(sum < n) {
       sum += i;
           i++;
     }
           
     if(sum == n) return 1;
     else return 0;
    }


    sum++ significa sum = sum+1, così come la i++.
    sum+=i significa sum = sum + i.

    E' questo ciò che cerhi?
    Se hai domande non esitare a chiedere.

    Edited by RootkitNeo - 28/10/2013, 18:57
     
    Top
    .
  5.  
    .
    Avatar

    Senior Member

    Group
    Staff
    Posts
    10,796

    Status
    Anonymous
    Facci sapere se è ciò che cercavi. ;)
     
    Top
    .
  6.  
    .
    Avatar

    Member

    Group
    Member
    Posts
    206

    Status
    Offline
    root si il programma va una bellezza,grazie;)..scusa se risp solo ora ma non mi collego sempre....questo programa purtroppo era la traccia d'esame di 2 settimane fa,esame che non ho passato..mi servirebbe saperli certi programmi..so che per te e gli altri di questo forum l'informatica è la vostra vita,ma la sciamelo dire:
    maledetta informatica!!!!m stai facendo rodere il fegato...
     
    Top
    .
  7.  
    .
    Avatar

    Senior Member

    Group
    Staff
    Posts
    10,796

    Status
    Anonymous
    Di nulla. ;)

    Sai, c'è sempre il solito detto: "Dai un pesce ad un uomo e lo sfamerai per un giorno. Insegnagli a pescare e lo sfamerai per tutta la vita". Quindi se hai domande, o vuoi spiegazioni, approfittane se sei in tempo (se hai l'esame domani, ad esempio, non so quanto possa servirti), devi solo aprire un topic.
     
    Top
    .
  8. Dodiz
     
    .

    User deleted


    CITAZIONE (RootkitNeo @ 28/10/2013, 15:52) 
    Ciao, solitamente non scriviamo codice bello e pronto ed ho sempre evitato di scrivere qualcosa per un altro (sempre se chi lo richiede non mi mostra del codice). Qui il caso è differente (non farai l'informatico), e capisco la situazione... quindi te lo scrivo, sperando di aver "saldato" i conti con il mio passato e sperando anche di essere in credito (può sempre tornare utile, specie in questo anno).


    Visto che non mi piace consegnare del codice bello e fatto, senza una spiegazione, dico giusto due parole.

    La funzione che devi scrivere quindi non è altro che una piccola rappresentazione in codice della precedente formula.

    CODICE
    #include<iostream>
    #include<cmath>

    using namespace std;

    bool triangolare(unsigned long int n) {
     double m = (sqrt(8*n+1)-1)/2;
     if(m - ((int)m) == 0) return 0;
     else return 1;
    }

    int main() {
     int n;
     cout << "Inserisci un numero: ";
     cin >> n;
     cout << triangolare(n);
     return 0;
    }

    spiegami un po'..si può usare anche return: n; direttamente? se il numero è uguale a zero è false, altrimenti è true, giusto? (sto imparando, vacci piano >_>)
     
    Top
    .
  9.  
    .
    Avatar

    Senior Member

    Group
    Staff
    Posts
    10,796

    Status
    Anonymous
    CITAZIONE (Dodiz @ 30/10/2013, 19:07) 
    spiegami un po'..si può usare anche return: n; direttamente? se il numero è uguale a zero è false, altrimenti è true, giusto? (sto imparando, vacci piano >_>)

    Si esatto. In questo caso però l'ho reso esplicito.
    Attenzione però al linguaggio che utilizzi in quanto non tutti hanno questa associazione (Java ad esempio ha solo i valori true/false, ma non sono associati ad alcun numero).

    Inoltre in questo caso potevo evitare l'else.
     
    Top
    .
  10.  
    .
    Avatar

    Member

    Group
    Member
    Posts
    206

    Status
    Offline
    CITAZIONE (RootkitNeo @ 30/10/2013, 16:47) 
    Di nulla. ;)

    Sai, c'è sempre il solito detto: "Dai un pesce ad un uomo e lo sfamerai per un giorno. Insegnagli a pescare e lo sfamerai per tutta la vita". Quindi se hai domande, o vuoi spiegazioni, approfittane se sei in tempo (se hai l'esame domani, ad esempio, non so quanto possa servirti), devi solo aprire un topic.

    bhe in primis grazie,poi visto che ci siamo vorrei chiederti un paio di cose:questi 2 programmi non ho la minima ide di come si facciano


    )costruire una funzione che restituisce il valore base ^ esponente.usare una funzione ricorsiva,e considerare anche il caso di esponenti negativi

    2)scrivere un programma definendo una funzione che restituisca la somma dei reciproci dei primi n numeri interi positivi,con funzione ricorsiva

    Es. somma(2)=1/1+1/2=1.5
    somma(3)=1/1+1/2+1/3=1.83



    e poi,cosa più importante,per caso puoi consigliarmi qualche guida(in italiano visto che ho poco tempo,l'esame è il 20 novembre,e il mio inglese è pessimo) c++??
    magari on line o da scaricare sarebbe meglio,dimmi tu..qualcosa di semplice,che anche un idiota(informaticamente parlando) come me può capire....grazie in anticipo :)
     
    Top
    .
  11. Guglielmoqwerty
     
    .

    User deleted


    Ciao, scusa se mi intrometto ;)

    Ti do il link della cartella C/C++ della mia biblioteca su dropbox, i titoli che ho raccolto fino ad ora mi sembrano abbastanza validi. (Addirittura quello di deitel credo sia un must ^^ )

    www.dropbox.com/sh/nbh2038x73ozix6/3b_u6TtFGO



    Nella cartella ci sono libri sia di C che di C++, ti consiglio anche di dare un occhiata ai libri su C in quanto è la base del C++ (come puoi intuire :P )
     
    Top
    .
  12.  
    .
    Avatar

    Member

    Group
    Member
    Posts
    206

    Status
    Offline
    grazie per i link..gli do un occhiata,sperando che possano essere utili ad una capra come me..non vogliatemene,ma come cavolo fa a piacervi l informatica??è arabo per me,e la trovo astrusa...ma come si dice,quel che piace ad uno non può piacere ad un altro...
    comunque ancora grazie
     
    Top
    .
  13. Guglielmoqwerty
     
    .

    User deleted


    A me piace per vari motivi. Uno dei principali è perchè la vedo come la matematica senza il bisogno di fare calcoli :)

    Comunque smettila di sottovalutarti a dire di essere stupido, bisogna solo entrarci pian piano (e senza nessuno che ti costringa). A meno che tu non sia come me che se cominci a valutarti normalmente diventi un egocentrico. In quel caso continua :P
     
    Top
    .
  14.  
    .
    Avatar

    Member

    Group
    Member
    Posts
    206

    Status
    Offline
    bhe degustibus,ripeto...può piacere o non piacere...e per favore non paragonarla con la matematica,che èmolto meglio..io sono comunque un quasi ingegnere,e so di non essere stupido,anzi......ma la matematica e la fisica(che adoro) sono tutt'altra cosa....purtroppo se una cosa non mi piace mi rifiuto di farla a priori,ma stavolta sono costretto..e appunto per questo mi risulta difficile,anzi quasi impossibile,ma non getto la spugna a priori...;)
     
    Top
    .
  15. Guglielmoqwerty
     
    .

    User deleted


    non est disputandum :P
    Secondo me invece è come un sottinsieme della matematica. (Per esempio il funzionamento delle funzioni è lo stesso, me ne sto accorgendo proprio quest'anno). Comunque non parliamo d'altro. (Se vuoi apriamo una nuova discussione :) ) Con il tuo problema hai risolto o hai bisogno ancora di aiuto? :)
     
    Top
    .
17 replies since 28/10/2013, 14:44   972 views
  Share  
.