Come posso migliorare questi enigmi di programmazione java online che ho scritto per gli studenti della mia scuola media e superiore? [chiuso]

2

Sto insegnando alcuni studenti delle scuole medie e superiori in questo momento, e ho scoperto che ad alcuni di loro piacevano davvero i puzzle di programmazione online. Così ho creato link , e al momento ci sono 4 categorie di puzzle.

Tutti gli enigmi sono impostati in questo momento in modo che le variabili siano preinizializzate e l'utente inserisca del codice nel mezzo.

Ad esempio, il problema potrebbe essere che questi sono preinizializzati:

int x = ????;
int y = ????;
int z;

e quindi il programma potrebbe chiedere allo studente di scrivere la riga finale del codice: z = x + y; .

Ora so che potrei fare molto per migliorare l'usabilità di questo sito (come avere un'area che elenca le variabili predefinite), ma mi stavo chiedendo se questo concetto sembra sano. So che alcuni siti hanno bambini che svolgono funzioni, ma non tutti i miei studenti sanno quali funzioni sono ancora disponibili, e sto cercando di introdurre dei puzzle di programmazione online prima di quello.

    
posta Arcymag 26.09.2012 - 08:30
fonte

3 risposte

1

Potresti unire meglio il tuo codice e l'inglese. È uno di quei problemi che StackExchange ha affrontato piuttosto bene. Potresti sviluppare un sistema come qui ed evidenziare qualsiasi testo che deve essere preso come codice. Inoltre, usa un colore diverso per la matematica, perché = significa cose diverse se il contesto è matematico o C.

Hai lezioni secondarie nei problemi. In questa seconda domanda introduci e spiega la mod op. Mettilo nel suo paragrafo o linkalo a parte. O, onestamente, solo collegalo .

I problemi attuali sono piuttosto sepolti in quei paragrafi. Ho letto un paio e quando sono arrivato alla fine non avevo idea di cosa stavo cercando di risolvere. Sentiti libero di avere una spiegazione di fondo (che è, sai, la parte educativa), ma prova a indicare chiaramente il problema.

E cose del tipo: "Puoi cercare su internet l'equazione appropriata da usare." non dovrebbe essere dichiarato I programmatori hanno accesso a Internet . Non lasciare che siano alla ricerca di soluzioni è arcaico quanto aspettarsi che scrivano le loro soluzioni a matita.

Un modulo standard per le variabili in entrata e i risultati attesi potrebbero aiutare.

Un nitpick personale è l'uso di nomi variabili vaghi e concisi. Se intendi insegnare la programmazione, insegna loro a usare nomi variabili che abbiano un senso.

Quindi, prendi una pausa a riscrivere una delle tue domande:

Numeri complessi: in matematica, la radice quadrata di un numero è X se X volte X risulta nel numero. Tuttavia, la radice quadrata di quella negativa è conosciuta come "i". ho le proprietà tali che i * i = -1. I numeri complessi sono scritti come la somma delle loro parti reali e immaginarie. Quindi, 3 + 2i è un numero complesso con 3 e una parte immaginaria 2i. Questi numeri complessi obbediscono alle regole algebriche standard per l'aggiunta e la moltiplicazione delle equazioni con le variabili. Quindi, (3 + 2i) * 5 = 15 * 10i. Inoltre, '(a + bi) * (c + di) = a * c + a * d * i + c * b * i + b * d * i * i, che semplifica a (a * cb * d) + (a * d + c * b) * i. Ulteriori letture: "numeri complessi", "moltiplicazione di numeri immaginari", "metodo FOIL", "moltiplicazione di binomi complessi"

Problema: Scrivi una funzione che risolve (a + bi) ^ 2.

Input:
int realPortion; //Range: any value
int imaginaryPortion; //Range: any value
Output:
realPortion dovrebbe memorizzare la porzione reale risultante dell'equazione.
imaginaryPortion dovrebbe memorizzare la porzione immaginaria risultante dell'equazione.

Modifica

//You do not need to create double a, or double b

La parola è "declare". Dichiarate le variabili. Ci si imbatterà in seguito ed è bene rimanere coerenti.

hmmm, qualcosa su queste dichiarazioni implicite delle variabili mi infastidisce ancora. Non so, forse vuoi mostrare esplicitamente il codice che viene prima e dopo?

void Divisibility_Test()
{
  int x;
  int y;
  boolean xIsDivisibleByY;

(casella di testo per gli studenti da digitare)

  evaluate(xIsDevisibleByY);
}

Inoltre, penso di avere un problema filosofico con # 7 che usa il casting per un int per arrotondare un doppio. Non posso dire che non funzioni. O che è sbagliato di per sé.

Questo sarebbe al di sopra e al di là, ma immagino che se ti sforzerai di avere giovani abbastanza impressionabili, dovrai colpire quelli che sono dotati di talento naturale che lo attraversano. Se avessi domande stimolanti sui bonus potresti essere in grado di illuminare qualche ispirazione e farli interessare. Cose come calcolare la sequenza di Fibonacci, costruire catene markov, un robot che può giocare a dama.

Buona fortuna. Insegnare ai bambini a programmare è un compito scoraggiante e dipende in gran parte da loro. Tutto quello che puoi fare è tracciare il percorso. Ripensandoci, c'erano un sacco di insidie e ore di frustrazione. ... ovviamente, ciò implica che tutto è cambiato.

    
risposta data 26.09.2012 - 17:50
fonte
3

C'era un sito qualche tempo fa (è morto ora) chiamato codingkata.org. I kata Java in quel caso avevano una descrizione del problema e poi hai usato un archetipo di tipo Maven per ottenere il progetto e implementare le firme del metodo date. Ci sono stati poi dei test unitari su cui è stato eseguito il codice quando hai eseguito mvn test che ti diceva se hai superato il kata o meno.

Fare qualcosa del genere potrebbe introdurre i tuoi studenti ai concetti di maven (che viene usato pesantemente nel mondo Java) e abituarli a usarlo per impostare progetti, gestire il pom ed eseguire i test unitari.

Li imporrebbe anche all'apprendimento delle funzioni e passando da this is my problem a this is my solution tutto nella sicurezza di sapere che può essere controllato automaticamente.

Possono anche usare il loro IDE preferito / editor di testo / ecc. per implementare il codice come meglio credono.

Vorrei anche lavorare sulla descrizione dei tuoi problemi; Li ho trovati difficili da leggere personalmente.

    
risposta data 26.09.2012 - 09:12
fonte
1

Alcune buone risposte già. Solo alcuni approfondimenti:

  • I tuoi problemi sono divertenti, ma almeno i primi riguardano tanto la matematica quanto la matematica quanto la programmazione. Va bene se questo è l'intento.

  • Potresti prendere in considerazione l'introduzione della procedura abbastanza presto. Sarebbe un bel piccolo pacchetto che potrebbe aiutare a definire la dichiarazione del problema e rendere più chiaro il test della soluzione. Inoltre, crea un pacchetto per le variabili da passare dentro e fuori. Invece di vedere che x = 4; y = 2; x + y = 6; una procedura darebbe il senso di una variazione infinita tale che int plus(int x, int y) { return ???; } avrebbe molto più senso e penso che sia più chiaro per uno studente da compilare. È utile (sorta di) al di fuori dello scopo di il problema individuale.

  • È davvero difficile scrivere una buona affermazione sui problemi. Attualmente sto seguendo il corso gratuito online di Martin Odersky Scala e spesso mi trovo confuso dal suo problema dichiarazioni. Ma include alcuni test unitari per ogni problema e leggere i suoi test mette davvero a fuoco la portata e l'intento del problema. Il punteggio effettivo utilizza circa il doppio dei test che ti dà e sei incoraggiato a fare i test. In realtà, il test unitario è il primo aspetto del corso che posso immediatamente applicare al lavoro.

risposta data 26.09.2012 - 18:42
fonte

Leggi altre domande sui tag