* * * *

Privacy Policy

Blog italiano

Clicca qui se vuoi andare al blog italiano su Lazarus e il pascal.

Forum ufficiale

Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.

Lazarus 1.0

Trascinare un file nel programma
DB concetti fondamentali e ZeosLib
Recuperare codice HTML da pagina web
Mandare mail con Lazarus
Stabilire il sistema operativo
Esempio lista in pascal
File INI
Codice di attivazione
Realizzare programmi multilingua
Lavorare con le directory
Utilizzare Unità esterne
TTreeView
TTreeview e Menu
Generare controlli RUN-TIME
LazReport, PDF ed immagini
Intercettare tasti premuti
Ampliare Lazarus
Lazarus e la crittografia
System Tray con Lazarus
UIB: Unified Interbase
Il file: questo sconosciuto
Conferma di chiusura di un applicazione
Liste e puntatori
Overload di funzioni
Funzioni a parametri variabili
Proprietà
Conversione numerica
TImage su Form e Panel
Indy gestiore server FTP lato Client
PopUpMenu sotto Pulsante (TSpeedButton)
Direttiva $macro
Toolbar
Evidenziare voci TreeView
Visualizzare un file Html esterno
StatusBar - aggirare l'errore variabile duplicata
Da DataSource a Excel
Le permutazioni
Brute force
Indy 10 - Invio email con allegati
La gestione degli errori in Lazarus
Pascal Script
Linux + Zeos + Firebird
Dataset virtuale
Overload di operatori
Lavorare con file in formato JSON con Lazarus
Zeos ... dietro le quinte (prima parte)
Disporre le finestre in un blocco unico (come Delphi)
Aspetto retrò (Cmd Line)
Lazarus 1.0
Come interfacciare periferica twain
Ubuntu - aggiornare free pascal e lazarus
fpcup: installazioni parallele di lazarus e fpc
Free Pascal e Lazarus sul Raspberry Pi
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.
Creare un server multithread
guida all'installazione di fpc trunk da subversion in linux gentoo
Indice
DB concetti fondamentali e connessioni standard
Advanced Record Syntax
DB concetti fondamentali e DBGrid
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText
Advanced Record Syntax: un esempio pratico
Superclasse form base per programmi gestionali (e non)
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form
Superclasse form base per programmi gestionali (e non) #4 - wait animation
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog
Installare lazarus su mac osx sierra
immagine docker per lavorare con lazarus e free pascal
TDD o Test-Driven Development
Benvenuto! Effettua l'accesso oppure registrati.
Giugno 20, 2024, 10:35:58 am

Inserisci il nome utente, la password e la durata della sessione.

32 Visitatori, 0 Utenti

Autore Topic: Divisione per interi ... una giungla  (Letto 910 volte)

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1291
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:Divisione per interi ... una giungla
« Risposta #15 il: Maggio 24, 2024, 09:04:55 am »
Se cercate "Divisione Euclidea" su Wikipedia c'è la spiegazione. Pascal fa la divisione con troncamento phyton quella con parte intera.
Ciao

Si, ma non torna comunque con i calcoli di Python, dove i valori di resto sono anche negativi (nel calcolo Euclideo il resto può essere solo positivo). Quindi Python non applica quel tipo di calcolo. Applica semplicemente un calcolo float dove l'arrotondamento e una scelta progettuale.

Parto dal presupposto che è ovvio e chiaro:
Citazione
"La divisione euclidea o divisione con resto è intuitivamente quell'operazione che si fa quando si suddivide un numero a di oggetti in gruppi di b oggetti ciascuno e quindi si conta quanti gruppi sono stati formati e quanti oggetti sono rimasti".

Quindi non ci possono essere più oggetti formati come risultato (quoziente) rispetto ai gruppo suddivisi: (-6 div 5) fa -1 cioè gli informatici ritengo che i gruppi siano presi in valore assoluto e il segno si applica poi. Inoltre il minore e maggiore è sempre rilevante verso le 0 per capire cosa si stà facendo. Dire che (-6 div 5) fà -2 perchè -2 è il numero di gruppi"minore" che si può ottenere (-1 è comunque maggiore di -2 e quindi la divisione da come risultato -2 ovviamente) mi pare ...  :-X (meglio che non mi esprima).

Cioè in poche parole per gli informatici (magari non tutti), che sono uomini di azione e vedono il concreto al di là delle teorie filosofiche, il risultati vanno presi in assoluto e poi si applicano i segni (questo detto in parole misere).

P.S.: comunque essere supportati dalle istruzioni di un processore INTEL ... bhè questa la dice tutta  :D :D :D :D :D :D.
« Ultima modifica: Maggio 24, 2024, 09:11:07 am da DragoRosso »
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2891
  • Karma: +20/-4
Re:Divisione per interi ... una giungla
« Risposta #16 il: Maggio 24, 2024, 09:24:38 am »
ho chiesto ad un mio collega matematico e mi ha liquidato dicendo che in matematica il modulo per come lo intendiamo noi informatici... non esiste

nel senso che non c'è un'operazione chiamata modulo ma ci sono dei procedimenti che possono calcolarlo, se abbiamo bisogno di quel calcolo

una risposta sicuramente discutibile ma che tutto sommato rende l'idea
il tutto sta nel tipo di calcolo che si necessita

probabilmente gli informatici hanno avuto quella necessità e lo hanno implementato così
nella versione python si è voluto essere aderenti ad una certa dimostrazione matematica

come si dice: non si finisce mai di imparare :)

Edit:
è comunque mia opinione che quelli del python avrebbero dovuto lasciare il calcolo del modulo
come già era in altri linguaggi e magari introdurne un secondo tipo
infatti quello che ci rimane in mano è 1 concetto con 2 metodi di calcolo...
« Ultima modifica: Maggio 24, 2024, 09:26:39 am da nomorelogic »
Imagination is more important than knowledge (A.Einstein)

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1291
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:Divisione per interi ... una giungla
« Risposta #17 il: Maggio 24, 2024, 09:26:41 am »
Voglio riportarvi un esempio pratico e banale:

un encoder, contaimpulsi che "conta" in positivo o negativo a seconda se ruota in senso orario o antiorario.
Non è che se questo fà -1000 impulsi e ogni giro viene effettuato con 750 impulsi fà -2 giri   :-X :-X :-X :

Pascal: (-1000 div 750) = -1 con resto xxx ==> deduco che ha fatto un (UNO) giro in senso antiorario ad esempio.
Python: (-1000 // 750) = -2 con resto xxx ==> deduco che ha fatto due (DUE) giri in senso antiorario..... (è barrato perchè non voglio che venga preso come esempio applicabile !!!)

In Pascal senza analizzare il resto ho già i miei dati, con Python deve farmi mille elucubrazioni sul quoziente e sul resto .... Questo è un esempio pratico e banale. Poi uno potrebbe aggiustarlo come vuole con mille elucubrazioni, algoritmi e fantasie varie: ma quello indicate è il modo più veloce, naturale e efficacie che non lascia nulla alla fantasia interpretativa.
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1291
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:Divisione per interi ... una giungla
« Risposta #18 il: Maggio 24, 2024, 09:30:14 am »
ho chiesto ad un mio collega matematico e mi ha liquidato dicendo che in matematica il modulo per come lo intendiamo noi informatici... non esiste

nel senso che non c'è un'operazione chiamata modulo ma ci sono dei procedimenti che possono calcolarlo, se abbiamo bisogno di quel calcolo

una risposta sicuramente discutibile ma che tutto sommato rende l'idea
il tutto sta nel tipo di calcolo che si necessita

probabilmente gli informatici hanno avuto quella necessità e lo hanno implementato così
nella versione python si è voluto essere aderenti ad una certa dimostrazione matematica

come si dice: non si finisce mai di imparare :)

Edit:
è comunque mia opinione che quelli del python avrebbero dovuto lasciare il calcolo del modulo
come già era in altri linguaggi e magari introdurne un secondo tipo
infatti quello che ci rimane in mano è 1 concetto con 2 metodi di calcolo...

Hi, hi, l'hanno detto anche a me, un fisico, che si è messo a ridere e ha concluso che noi informatici ci inventiamo molto spesso la matematica "per scansare la fatica del ragionamento"

P.S.: Comunque, il fatto che Intel (e penso anche AMD ovviamente) abbia implementato proprio in HARDWARE una istruzione aderente al ragionamento che si addice a noi informatici la dice lunga.
« Ultima modifica: Maggio 24, 2024, 09:36:45 am da DragoRosso »
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2891
  • Karma: +20/-4
Re:Divisione per interi ... una giungla
« Risposta #19 il: Maggio 24, 2024, 11:49:21 am »
P.S.: Comunque, il fatto che Intel (e penso anche AMD ovviamente) abbia implementato proprio in HARDWARE una istruzione aderente al ragionamento che si addice a noi informatici la dice lunga.

si, diciamo che è una scuola di pensiero radicata  :)
Imagination is more important than knowledge (A.Einstein)

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1291
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:Divisione per interi ... una giungla
« Risposta #20 il: Maggio 24, 2024, 03:34:25 pm »
Per chi vuole, questo è il codice per fare con processori INTEL X64 in tutti i sistemi operativi teoricamente il calcolo tra numeri interi in modo "informatico" (ciò che fà il Pascal con il DIV e il MOD.

Poi farò anche i vari overload per i tipi e per x86.

Codice: [Seleziona]
{$IFDEF CPUX64}
/// <summary> Esegue una divisione per interi fornendo come risultato quoziente e resto </summary>
/// <remarks> Esegue il calcolo da "informatico" stile tutto chiaro !!! </remarks>
function DivandMod(Dividendo: int64; Divisore: int64; var Resto: int64): int64; register;
begin
  {$ASMMODE intel}
  asm
  //Dividendo, in RCX
  //Divisore, in RDX
  //Resto, memoria puntata da R8
  //Risultato (quoziente) in RAX
  mov RAX, RCX
  mov RCX, RDX
  CQO
  //idiv esegue la divisione intera e riporta il quoziente in RAX e in RDX il resto
  idiv RCX
  //SONO EQUIVALENTI LE DUE SUCCESSIVE IN DELPHI, IN LAZARUS NO !!!
  mov QWORD PTR [R8], RDX
  //mov QWORD PTR [Resto], RDX     //SOLO X DELPHI

  end;
end;
{$ENDIF}

procedure TForm1.Button1Click(Sender: TObject);
var quoziente: integer;
    resto: int64;
    Dividendo: int64;
    Divisore: int64;
begin
  Dividendo := 9;
  Divisore := -5;
  resto := 15;
  quoziente := DivandMod(Dividendo, Divisore, resto);
  ShowMessage('Quoziente= '+quoziente.ToString+' Resto= '+resto.ToString); 
end;[/code
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

 

Recenti

How To

Utenti
Stats
  • Post in totale: 18882
  • Topic in totale: 2248
  • Online Today: 34
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 32
Total: 32

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.