Vai al contenuto

Ancora Xcode :oops:


Toma91

Messaggi raccomandati

Uffa!!! Perché la funzione

[primoNum setIntValue:(random() %90) +1];
[secondoNum setIntValue:(random() %90) +1];
[terzoNum setIntValue:(random() %90) +1];
[quartoNum setIntValue:(random() %90) +1];

mi da sempre gli stessi valori? Mi spiego meglio:

apro l'app

_primo click 74 - 17 - 28 - 26

_secondo click 10 - 2 - 33 -68

chiudo l'app

la riapro

_primo click ANCORA 74 - 17 - 28 - 26

_secondo click DI NUOVO 10 - 2 - 33 -68

Cosa sbaglio??? :ghghgh::fiorellino:

Le mie : Macintosh Plus con System 7, Power Macintosh 8600/200 con Mac OS 9.1, iMac G3 DV con Mac OS 9.2.2 e Mac OS X 10.0,

MacBook Nero 3,1 con Mac OS X 10.7.2, iPod Nano 2G 4 Gb e iPod Nano 4G 8 Gb

Link al commento
Condividi su altri siti

Non so il lunguaggio che usi ma in c si deve inizializzare il "seme" al fine di ottenere dati diversi.

Questo significa incominciare ad elaborare il numero pseudocasuale da un valore diverso ogni volta, se no se si parte dallo stesso valore e si fanno gli stessi calcoli si arriva sempre alla stessa soluzione.

in c si va con srand(time(NULL)).

Dio@paradiso:~$ gcc -o Terra World.cpp

Link al commento
Condividi su altri siti

Infatti scusa, dovevo dire cosa stavo usando... Ora provo e poi ti faccio sapere :fiorellino:

Le mie : Macintosh Plus con System 7, Power Macintosh 8600/200 con Mac OS 9.1, iMac G3 DV con Mac OS 9.2.2 e Mac OS X 10.0,

MacBook Nero 3,1 con Mac OS X 10.7.2, iPod Nano 2G 4 Gb e iPod Nano 4G 8 Gb

Link al commento
Condividi su altri siti

Grazie, così ho risolto :fiorellino:

Allora ti faccio un'altra domanda, se posso...

Come faccio a far ricominciare a lavorare il codice da capo

in caso due numeri vengano uguali? Scusa se ti rompo :ghghgh:

Le mie : Macintosh Plus con System 7, Power Macintosh 8600/200 con Mac OS 9.1, iMac G3 DV con Mac OS 9.2.2 e Mac OS X 10.0,

MacBook Nero 3,1 con Mac OS X 10.7.2, iPod Nano 2G 4 Gb e iPod Nano 4G 8 Gb

Link al commento
Condividi su altri siti

puoi fare:

[primoNum setIntValue:(random() %90) +1];
[secondoNum setIntValue:(random() %90) +1];
while ([secondoNum intValue] == [primoNum intValue])
   [secondoNum setIntValue:(random() %90) +1];
[terzoNum setIntValue:(random() %90) +1];
while ([terzoNum intValue] == [primoNum intValue] || [terzoNum intValue] == [secondoNum intValue])
   [terzoNum setIntValue:(random() %90) +1];

etc etc...

Non e' granche come codice (si puo' fare meglio) ma non so come salvi le varie cose. A proposito, perche' usi NSNumber (immagino usi quello, visto che usi setIntValue), se usi semplicement degli int? Puoi appunto usare int or NSInteger. Sono type, non objects. Se per qualcosa ti serve un object e non un type (ad esempio, per salvare in un NSArray, ...) puoi sempre fare tutto on the fly salvando solo gli int/NSInteger...

ciopciop

ciop ciop

~marforic

Il mio blog: http://www.cloudgoessocial.net

Link al commento
Condividi su altri siti

Guarda io ho provato a fare così...

Solo che non funziona ancora... Non ri-inizia il loop se il primo numero non è uguale al secondo...

E uso stringValue perché i numeri si trovano all'interno di NStextField... Sbaglio?

//
//  MAFoo.m
//
//  Created by Andrea on 30/09/09.
//  Copyright 2009 AndreaDev. All rights reserved.
//

#import "MAFoo.h"

@implementation MAFoo

- (IBAction)gioca:(id)sender {

do {
	srand(time(NULL));
	[primoNum setIntValue:(rand() %90) +1];
	[secondoNum setIntValue:(rand() %90) +1];
	[terzoNum setIntValue:(rand() %90) +1];
	[quartoNum setIntValue:(rand() %90) +1];
	[quintoNum setIntValue:(rand() %90) +1];
	[sestoNum setIntValue:(rand() %90) +1];
	[jollyNum setIntValue:(rand() %90) +1];
	[starNum setIntValue:(rand() %90) +1];
}

while([[primoNum stringValue] isEqualTo: [secondoNum stringValue]]);

}

@end

Le mie : Macintosh Plus con System 7, Power Macintosh 8600/200 con Mac OS 9.1, iMac G3 DV con Mac OS 9.2.2 e Mac OS X 10.0,

MacBook Nero 3,1 con Mac OS X 10.7.2, iPod Nano 2G 4 Gb e iPod Nano 4G 8 Gb

Link al commento
Condividi su altri siti

ma e' ovvio che non re-inizializza tutto il loop.

Controlla solo che il secondo non sia uguale al primo, che il terzo non sia uguale al secondo o al primo, ... (questo il codice che ti ho passato io...)

non so cosa sia primoNum, etc, mi dici che sono dei textfields?

- (IBAction)gioca:(id)sender {
srand(time(NULL));
NSMutableArray * nums = [[NSMutableArray alloc] init];
for (NSUInteger i = 0; i < 8; i++) {
	NSUInteger tmp = (rand() % 90) + 1;
	if (![nums containsObject:[NSNumber numberWithInt:tmp]])
		[nums addObject:[NSNumber numberWithInt:tmp]];	
}

[primoNum setIntValue:[nums objectAtIndex:0]];
[secondoNum setIntValue:[nums objectAtIndex:1]];
[terzoNum setIntValue:[nums objectAtIndex:2]];
[quartoNum setIntValue:[nums objectAtIndex:3]];
[quintoNum setIntValue:[nums objectAtIndex:4]];
[sestoNum setIntValue:[nums objectAtIndex:5]];
[jollyNum setIntValue:[nums objectAtIndex:6]];
[starNum setIntValue:[nums objectAtIndex:7]];

[nums release];

}

ciop ciop

~marforic

Il mio blog: http://www.cloudgoessocial.net

Link al commento
Condividi su altri siti

Allora: primoNum ecc sono IBOutlet, che in Interface Builder sono NSTextFields.

Poi se per favore mi spieghi cosa fa il codice che mi hai proposto, visto che sono

quasi agli albori della programmazione e devo/voglio capire...

Grazie per l'attenzione :ciao:

Le mie : Macintosh Plus con System 7, Power Macintosh 8600/200 con Mac OS 9.1, iMac G3 DV con Mac OS 9.2.2 e Mac OS X 10.0,

MacBook Nero 3,1 con Mac OS X 10.7.2, iPod Nano 2G 4 Gb e iPod Nano 4G 8 Gb

Link al commento
Condividi su altri siti

mi sono accorto che ho fatto un errore.

for (NSUInteger i = 0; i < 8; i++)

deve essere

while ([nums count] < 

1) setto il seed di rand()

2) creo un array (una lista) di oggetti (vuoto)

3) finche' l'array non contiene 8 numeri continuo nel while

3a) creo un numero a random, se l'array non lo contiene lo aggiungo (cosi' sei sicuro di non avere duplicati)

4) per ogni TextField prendo un numero dall'Array. (se tu al posto di avere 8 IBOutlets nello .xib assegni un tag unico ad ogni textfield potresti fare tutto molto meglio... ma e' gia piu' avanzato, quindi lascia stare per ora).

5) releaso l'array nums che ho creato qui' perche' non mi serve piu' (altrimenti avresti un 'leak').

piu' chiaro?

ciop ciop

ciop ciop

~marforic

Il mio blog: http://www.cloudgoessocial.net

Link al commento
Condividi su altri siti

se posso permettermi di darti un consiglio...studiati bene i costrutti base di C che sono essenziali in OBJC - Cocoa...

ciao :ciao:

 Macbook White 13" 2,0GHz || iMac 20" 2,4 GHz || iPhone 3G 8Gb

Link al commento
Condividi su altri siti

se posso permettermi di darti un consiglio...studiati bene i costrutti base di C che sono essenziali in OBJC - Cocoa...

ciao :dance:

È ovviamente quello che intendo fare e farò :dance:!!!

Però intanto stavo provando ad applicare qualche concetto base, perché anche facendo esperienza direttamente nel campo si impara...

Solo che questa volta sono voluto andare un po' altre per un mio piccolo sfizio :dance:

Le mie : Macintosh Plus con System 7, Power Macintosh 8600/200 con Mac OS 9.1, iMac G3 DV con Mac OS 9.2.2 e Mac OS X 10.0,

MacBook Nero 3,1 con Mac OS X 10.7.2, iPod Nano 2G 4 Gb e iPod Nano 4G 8 Gb

Link al commento
Condividi su altri siti

mi sono accorto che ho fatto un errore.

for (NSUInteger i = 0; i < 8; i++)

deve essere

while ([nums count] < 

1) setto il seed di rand()

2) creo un array (una lista) di oggetti (vuoto)

3) finche' l'array non contiene 8 numeri continuo nel while

3a) creo un numero a random, se l'array non lo contiene lo aggiungo (cosi' sei sicuro di non avere duplicati)

4) per ogni TextField prendo un numero dall'Array. (se tu al posto di avere 8 IBOutlets nello .xib assegni un tag unico ad ogni textfield potresti fare tutto molto meglio... ma e' gia piu' avanzato, quindi lascia stare per ora).

5) releaso l'array nums che ho creato qui' perche' non mi serve piu' (altrimenti avresti un 'leak').

piu' chiaro?

ciop ciop

Non ti avevo ancora ringraziato, scusa!

Sì così è più chiaro :dance: spero di imparare meglio al più presto :dance:

Domani in giornata provo il codice, e poi faccio sapere :mhh::dance:

Le mie : Macintosh Plus con System 7, Power Macintosh 8600/200 con Mac OS 9.1, iMac G3 DV con Mac OS 9.2.2 e Mac OS X 10.0,

MacBook Nero 3,1 con Mac OS X 10.7.2, iPod Nano 2G 4 Gb e iPod Nano 4G 8 Gb

Link al commento
Condividi su altri siti

Se conosci il numero più grande che è possibile far uscire dall'elaborazione basta che fai un vettore di booleani di dimensione esattamente quella del numero più grande.

Ogni volta che fai uscire un numero n controlli se vettore[n] è false ed in questo caso lo metti a true.

Se è true aumenti di 1 finché non arrivi a massimo+1 o non trovi un posto false.

Se i posti sono tutti true ricominci da 0 fino ad arrivare al numero iniziale: se sono tutti positivi significa che hai esaurito i valori, altrimenti un posto false lo trovi.

Un metodo meno veloce ma meno incasinato consiste nel salvare i valori che escono in un vettore ridimensionabile e fare la ricerca nel vettore.

Dio@paradiso:~$ gcc -o Terra World.cpp

Link al commento
Condividi su altri siti

Archiviato

Questa discussione è archiviata e chiusa a future risposte.

×
×
  • Crea Nuovo...