Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [PASCAL] Combinazioni moltiplicazione

    Vorrei creare un programma che dato un numero scriva a video tutte le varie combinazioni di 4 cifre che moltiplicate tra di loro danno il numero.

    Ad esempio se l'utente digita 12
    sul video compariranno le combinazioni

    1*1*6*2
    1*1*2*6
    1*2*6*1
    2*6*1*1
    6*2*1*1
    6*1*2*1
    2*1*6*1
    3*2*2*1
    2*3*1*2
    eccetera

    Potreste farmi un esempio di codice? E' giusto utilizzare la funzione random?

    Grazie

  2. #2
    secondo me potresti fare

    for i:=1111 to 9999 do
    begin
    if primacifra*secondacifra*terzacifra*quartacifra=12 then
    Writeln(i);
    end;

    [OT] Ma tu sei quello di hackerminds? Perchè questo che hai chiesto assomiglia al liv 3 di hackertrainer :rollo: [/OT]

  3. #3
    Non capisco il tuo programma
    Coma fa a verificare la condizione se le cifre non sono nemmeno inizializzate?
    Forse vedi in "i" le quattro cifre ma la variabile "i" è un numero quindi le sue cifre non possono essere moltiplicate tra di loro (penso).

    Avevo pensato ad una cosa così:

    Program Lv3;
    uses crt;
    var a,b,c,d,i:integer;
    begin
    for i:= 1 to 50000 do
    begin
    a:=random(9);
    b:=random(9);
    c:=random(9);
    d:=random(9);
    if a*b*c*d=12 then writeln(a,'*',b'*',c'*',d'= 12');
    end;
    repeat until keypressed
    end.

    Ma questo programma non mi assicura al 100% che vengano fuori tutte le combinazioni possibili e per di più me le ripete più volte.

    grazie

  4. #4
    non usare il random perchè ovviamente non è sicuro...
    io ho fatto così:
    in delphi c'è la funzione IntToStr e StrToInt che convertono da stringa a intero e viceversa, in pascal c'è Val e Str ma non mi ricordo la loro sintassi perchè non ho il pascal sotto mano, quindi userò quelle del delphi e adattale tu.

    codice:
    var code,cifra1,cifra2,cifra3,cifra4:integer; scode:string;
    ///...............
    for code:=1111 to 9999 do
      begin
      scode := IntToStr(code);
      cifra1 := StrToInt(scode[1]);
      cifra2 := StrToInt(scode[2]);
      cifra3 := StrToInt(scode[3]);
      cifra4 := StrToInt(scode[4]);
    
      if (cifra1*cifra2*cifra3*cifra4=12) then
        Writeln(code);
      end;
    ripeto, stai facendo l'hackertrainer vero??


  5. #5
    Utente di HTML.it L'avatar di mico
    Registrato dal
    Jul 2005
    Messaggi
    140
    Originariamente inviato da lomiz
    Forse vedi in "i" le quattro cifre ma la variabile "i" è un numero quindi le sue cifre non possono essere moltiplicate tra di loro (penso).
    se ad esmpio prendiamo i=2341 e consideriamo che 2341 = 2*10^3 + 3*10^2 + 4*10 + 1 allora dividendo 2341 per 10 otteniamo 2*10^2 + 3*10 + 4 come quoziente e 1 come resto (che è la prima cifra di 2341). Ridividiamo per 10 anche 2*10^2 + 3*10 + 4 e otteniamo resto 4 (che è la seconda cifra) e quoziente 2*10 + 3. Andando avanti così troverai le 4 cifre nei 4 resti ottenuti. Quindi dovresti creare delle function apposite per trovare le 4 cifre del numero i e poi moltiplicarle

  6. #6
    Come si deve comportare il programma nel caso di un numero che ha come fattore un numero primo con due o più cifre ?

  7. #7
    Utente di HTML.it L'avatar di mico
    Registrato dal
    Jul 2005
    Messaggi
    140
    Originariamente inviato da king64
    Come si deve comportare il programma nel caso di un numero che ha come fattore un numero primo con due o più cifre ?
    in effetti .. cmq penso che in questo caso non deve apparire alcuna combinazione oppure il programma deve avvertire con un messaggio ..

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Ad ogni modo, per reperire l'iesima cifra di un numero è sufficiente prendere la parte intera della divisione del numero per la potenza di dieci relativa alla posizione:
    codice:
    1234 = 1 * 10^3 + 2 * 10^2 + 3 * 10^1 + 4 * 10^0
    Quindi..l la terza cifra (partendo da destra) sarà...
    codice:
    int(numero / 10^2)
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    Utente di HTML.it L'avatar di mico
    Registrato dal
    Jul 2005
    Messaggi
    140
    Originariamente inviato da LeleFT
    Quindi..l la terza cifra (partendo da destra) sarà...
    codice:
    int(numero / 10^2)
    se numero = 1234 allora numero/10^2 = 12,34 e quindi int(numero / 10^2)=12 ... 12 come fa ad essere una cifra?? :master: .. ditemi se ho sbagliato qualche conto

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Sì... è vero... ho scritto una baggianata. E' necessario partire dalla cifra di ordine più alto, togliendo, di volta in volta, il suo peso dal numero iniziale:
    codice:
    Numero = 1234
    
    Prima cifra: int(Numero / 10^3)
    Numero = Numero - (Prima Cifra * 10^3)
    Seconda cifra: int(Numero / 10^2)
    Numero = Numero - (Seconda Cifra * 10^2)
    ...
    Oppure, giocando con i moduli:
    codice:
    Numero = 1234
    
    Terza Cifra = Int(Numero / 10 ^ 2) MOD 10
    In generale (partendo da destra):
    codice:
    N-Esima Cifra = Int(Numero / 10^(n-1)) MOD 10
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.