Aiuto programma xCode per iPhone

di il
9 risposte

Aiuto programma xCode per iPhone

Buonasera a tutti,
Sono nuovo su questo forum quindi farò una piccola presentazione: sono un ragazzo di 19 anni che frequenta il quinto anno di liceo scientifico, che ha sempre amato la matematica e l'informatica (anche se purtroppo nella mia scuola non insegnano quest'ultima).

Il mio problema è inserire questo algoritmo:

definisco prima i seguenti oggetti (scusate se sto usando un linguaggio improprio):
contatore(A)=0
contatore(B)=1 (che chiamerò "n" per semplicità)

step 1

calcola f(n):
-restituisci n se n<10
-altrimenti restituisci n mod(10)+f(floor(n/10))

step 2

prendi il risultato precedente (chiamiamolo k per chiarezza) e poi:
-restituisci k se k<(parametro1)
-altrimenti applica nuovamente la funzione "f" fino a che non si verifica la condizione k<(parametro)

step 3

se k=(parametro2), aggiungi 1 al contatore(A)
altrimenti passa a "step 4"

step 4

se n<(parametro3), aggiungi 1 al contatore(B) e torna allo "step 1"
altrimenti passa a "step5"

step 5

mostra il contatore(A).

Ho già provato a creare un codice che faccia ciò e penso di aver fatto tutto abbastanza bene, la parte che mi crea più problemi è lo "step1" su cui non ho idea riguardo come comportarmi...
ho provato con il comando "if..." ma non riesco! non so nemmeno inserire le congruenze modulo n e la funzione floor.

Non pretendo che qualcuno mi scriva il codice, vorrei solo dei piccoli consigli anche su come usare i comandi in maniera corretta(poi se potete fare di più accetto più che volentieri ).

grazie in anticipo, spero di essermi spiegato bene.

ps. uso l'ultima versione di xCode e sto facendo un "app" (se così si può chiamare) per ios 7.0

9 Risposte

  • Re: Aiuto programma xCode per iPhone

    Ciao e benvenuto nel forum!
    Non credo di aver capito quello che devi fare, potresti spiegare un po' meglio l'idea (es: a cosa serve l'app?). Inoltre che linguaggio usi, swift o objective-c?
  • Re: Aiuto programma xCode per iPhone

    Il linguaggio che uso è objective-c

    Quello che sto cercando di fare è un progetto per la mia tesina.
    l' argomento fondamentale è combinatoria e probabilità e mi sarebbe piaciuto affrontare "problemi" reali (un più interessanti per tutte le persone che mi devono ascoltare)...
    Ma adesso arriviamo al dunque; fra questi problemi volevo affrontarne alcuni che prendono spunto dal dilemma per eccellenza di ogni studente che sta per essere interrogato, ovvero: quanto è probabile che il prof interroghi proprio me?
    Uno dei metodi di sorteggio più usati è quello di aprire un libro a una pagina a caso, sommare le cifre e interrogare lo studente che corrisponde a quel numero nel registro.
    E' risaputo che quest'ultimo metodo è totalmente ingiusto, ma il mio obbiettivo sarebbe riuscire proprio a calcolare la probabilità di ogni alunno in funzione di 3 parametri (pagine del libro, numero di alunni nella classe, e numero dell'alunno nel registro).

    Visto che uno dei miei più grandi sogni è sempre stato quello di sviluppare un "app" (già da piccolo provavo a scrivere programmi su windows ), e visto che il problema precedente è piuttosto arduo da risolvere senza l' ausilio della "forza bruta" , ho deciso di intraprendere questa strada!

    l' algoritmo che ho creato mi sembra funzioni piuttosto bene dal punto di vista logico (correggimi se sbaglio) ma quello che mi manca è tutta la parte della programmazione (anche se non credo sia troppo difficile, già ho provato a seguire tutorial, adesso sto cercando delle piccole dispense)...
  • Re: Aiuto programma xCode per iPhone

    Ok ora è più chiaro. Quindi di fatto invece di calcolarti la probabilità a livello teorico fai una serie di simulazioni e cerchi di fare delle statistiche. Qua però si pongono altre domande: come simuli la generazione del numero di pagina? Nella pratica non tutte le pagine hanno la stessa probabilità di essere estratte (es: la prima pagina ha una probabilità di essere estratta molto bassa, le pagine centrali hanno una probabilità maggiore); immagino che la distribuzione di probabilità sia più o meno una gaussiana. Inoltre sulla base di quale algoritmo effettui le somme? Ad esempio se esce la pagina 146 come sommi i numeri? Potresti fare 14+6 = 20, 1+4+6 = 11, 1+46 = 47 (nella mia esperienza scolastica mi sono capitate le ultime 2 varianti).
  • Re: Aiuto programma xCode per iPhone

    Della ha scritto:


    Ok ora è più chiaro. Quindi di fatto invece di calcolarti la probabilità a livello teorico fai una serie di simulazioni e cerchi di fare delle statistiche. Qua però si pongono altre domande: come simuli la generazione del numero di pagina? Nella pratica non tutte le pagine hanno la stessa probabilità di essere estratte (es: la prima pagina ha una probabilità di essere estratta molto bassa, le pagine centrali hanno una probabilità maggiore); immagino che la distribuzione di probabilità sia più o meno una gaussiana. Inoltre sulla base di quale algoritmo effettui le somme? Ad esempio se esce la pagina 146 come sommi i numeri? Potresti fare 14+6 = 20, 1+4+6 = 11, 1+46 = 47 (nella mia esperienza scolastica mi sono capitate le ultime 2 varianti).
    E' vero, non tutte le pagine escono con la stessa probabilità... ma per adesso sarei soddisfatto anche solo supponendo che tutte le pagine siano equiprobabili. (forse proverò successivamente a prendere in considerazione questa variabile, di non poco conto in realtà!)

    Riguardo al metodo di effettuare le somme direi che mi piacerebbe dare la scelta all' utente su quale metodo adottare (quindi li implementerei tutti e tre)... dal punto di vista matematico credo di poter ricavare facilmente delle funzioni che mi associano ad un numero la somma delle cifre
    (per esempio la funzione "f" di cui parlo nella domanda iniziale associa al numero 146 il numero 1+4+6=11)

    Un altra cosa che mi piacerebbe introdurre è per esempio:
    mettiamo che io sia l' alunno numero 2, e gli alunno 11 e 20 siano già stati interrogati.
    la probabilità che ho di essere interrogato è data da la mia più quella che esca 11 più quella che esca 20 (infatti in entrambi i casi ho che la somma delle cifre fa 2 --> 1+1=0+2=2)

    Comunque ripeto... mi accontenterei anche di una cosa molto semplificata, sarebbe già una grande soddisfazione per me! Sennò ho paura che diventi troppo fuori dalla mia portata il progetto... tu che ne pensi? è fattibile una cosa simile?
  • Re: Aiuto programma xCode per iPhone

    Partendo da una cosa semplificata si fa sempre in tempo a raffinare le varie parti e a renderle più realistiche. Secondo me è un'applicazione fattibile comunque. Prima di partire con lo sviluppo, però, assicurati di aver ben compreso concetti fondamentali come la programmazione ad oggetti ed il pattern MVC: senza di essi sarà molto difficile creare un'applicazione funzionante
  • Re: Aiuto programma xCode per iPhone

    I concetti alla base penso di averli compresi (sicuramente in maniera poco approfondita)...
    Pe quanto riguarda la parte grafica e l' interazione fra utente e app penso di aver sistemato praticamente tutto (adesso vi farò degli esempi per spiegarmi meglio).

    questo è il codice che ho scritto nel file ViewController.m:
    #import "ViewController.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        valoreA = 0;
        valoreB = 0;
        valoreC = 0;
        risultato = 0;
        valoreK = 1;
        valoreN = 0;
        funzioneF = 0;
        funzioneG = 0;
        
        // Do any additional setup after loading the view, typically from a nib.
    }
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    - (IBAction)Calcola:(id)sender {
        valoreA = ([TextFieldA.text floatValue]);
        valoreB = ([TextFieldB.text floatValue]);
        valoreC = ([TextFieldC.text floatValue]);
        
        
    label1: {
        funzioneF = (valoreK%10)+ ((valoreK/10)%10) + ((valoreK/100)%10) + ((valoreK/1000)%10);
        goto label2;
    }
        
    label2: {
        if (funzioneF < valoreB) {
            goto label3;
        }
        else
            funzioneG = (valoreK%10)+ ((valoreK/10)%10) + ((valoreK/100)%10) + ((valoreK/1000)%10);
            funzioneF = funzioneG;
            goto label3;
    }
        
    label3: {
        if (funzioneF == valoreC) {
            valoreN += 1;
            goto label4;
        }
        else
            goto label4;
    }
        
    label4: {
        if (valoreK <= valoreA) {
            valoreK += 1;
            goto label2;
        }
        else
            goto label5;
    }
        
    label5: {
        risultato = valoreN/valoreA;
    }
        
        Risultato.text = [NSString stringWithFormat:@"%f", risultato];
        [TextFieldA resignFirstResponder];
        [TextFieldB resignFirstResponder];
        [TextFieldC resignFirstResponder];
    }
    
    - (IBAction)FineEditing:(id)sender {
        [TextFieldA resignFirstResponder];
        [TextFieldB resignFirstResponder];
        [TextFieldC resignFirstResponder];
    }
    @end
    Però non fa quello che vorrei (molto probabilmente non ho capito come usare i comandi "goto" e i "label"... oppure sbaglio qualcos'altro, non saprei)!

    Se provo a scrivere codici più semplici come:
    #import "ViewController.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        valoreA = 0;
        valoreB = 0;
        valoreC = 0;
        risultato = 0;
        
        // Do any additional setup after loading the view, typically from a nib.
    }
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    - (IBAction)Calcola:(id)sender {
        valoreA = ([TextFieldA.text floatValue]);
        valoreB = ([TextFieldB.text floatValue]);
        valoreC = ([TextFieldC.text floatValue]);
        
        
        risultato= (valoreA+valoreB)/valoreC
        
        Risultato.text = [NSString stringWithFormat:@"%f", risultato];
        [TextFieldA resignFirstResponder];
        [TextFieldB resignFirstResponder];
        [TextFieldC resignFirstResponder];
    }
    
    - (IBAction)FineEditing:(id)sender {
        [TextFieldA resignFirstResponder];
        [TextFieldB resignFirstResponder];
        [TextFieldC resignFirstResponder];
    }
    @end
    
    Funziona perfettamente!

    e anche comandi tipo:
    #import "ViewController.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        valoreA = 0;
       
        // Do any additional setup after loading the view, typically from a nib.
    }
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    - (IBAction)Calcola:(id)sender {
        valoreA = ([TextFieldA.text floatValue]);
    
        funzioneF = (valoreA%10)+ ((valoreA/10)%10) + ((valoreA/100)%10) + ((valoreA/1000)%10);
    
        risultato = funzioneF
    
        Risultato.text = [NSString stringWithFormat:@"%f", risultato];
        [TextFieldA resignFirstResponder];
        [TextFieldB resignFirstResponder];
        [TextFieldC resignFirstResponder];
    }
    
    - (IBAction)FineEditing:(id)sender {
        [TextFieldA resignFirstResponder];
        [TextFieldB resignFirstResponder];
        [TextFieldC resignFirstResponder];
    }
    @end
    funziona correttamente...

    Cosa sto sbagliando?
  • Re: Aiuto programma xCode per iPhone

    Dunque innanzitutto elimina dal file ViewController.m le righe
    @interface ViewController ()
    
    @end
    , righe che definiscono una Class extension e che non ti servono in questo momento.

    In secondo luogo del goto devi sapere solamente una cosa molto semplice: NON USARLO!
    Invece del goto puoi semplicemente creare dei metodi, ad esempio supponendo che la funzione G restituisca un intero ed abbia un solo parametro intero in ingresso (cioè valoreK):
    
    - (int) funzioneG: (int) valoreK
    {
        ... corpo della funzione ...
        return risultato;
    }
    
    Nota poi che il linguaggio è case-sensitive, cioè "Risultato" è diverso da "risultato".

    Infine ti consiglio di dare alle variabili e/o metodi dei nomi più significativi. Questo ovviamente non influisce sul funzionamento del programma, ma è utile a chi scrive/legge il codice per capire cosa sta facendo
  • Re: Aiuto programma xCode per iPhone

    Grazie mille!

    Ho un altre domande:
    se la funzione è definita per casi, come nel mio caso, (scusa il gioco di parole) posso tranquillamente usare i comandi if ed else nel corpo della funzione?

    Seconda domanda:
    se ho la necessita di ripetere uno stesso processo più volte che comando mi consigli di usare?
    Infatti nell' algoritmo che avevo pensato volevo proprio controllare tutti i numeri da 1 a "ultima pagina=valoreA" (che sono rappresentati dal "valoreK" nel codice che ho scritto) uno per volta e se si verificava la condizione che la somma delle cifre era uguale al numero dell' alunno (valoreC) aggiungere 1 al "valoreN"(casi favorevoli) e poi ricominciare il processo con un "valoreK" aumentato di 1 (ovvero la pagina successiva), fino a che il valoreK eguaglia il numero massimo delle pagine, a quel punto mostrare il risultato...

    Quello che ho chiamato valoreB è il numero degli alunni nella classe.

    Grazie per l' aiuto
  • Re: Aiuto programma xCode per iPhone

    Damb96 ha scritto:


    se la funzione è definita per casi, come nel mio caso, (scusa il gioco di parole) posso tranquillamente usare i comandi if ed else nel corpo della funzione?
    Certo

    Damb96 ha scritto:


    se ho la necessita di ripetere uno stesso processo più volte che comando mi consigli di usare?
    I cicli servono proprio a questo!

    Le strutture di controllo condizionale e i cicli, però, sono concetti basilari, per cui secondo me non è possibile pensare di realizzare un'applicazione senza aver capito questi ed altri concetti. Il mio consiglio è quello di prendere un libro sulla programmazione ad oggetti e studiarlo. Anche se non è specifico sull'objective-c va bene lo stesso, perché i concetti teorici sono grosso modo gli stessi, l'unica cosa che cambia è la sintassi, ma quella si impara in poco tempo
Devi accedere o registrarti per scrivere nel forum
9 risposte