View Full Version : Da frammento di codice individuale trovare risultato
Demonius
01-12-2021, 22:22
Ciao a tutti. Stavo svolgendo un'esercizio dove mi si chiede da questo frammento di codice di ricavare la risposta esatta:
Fr codice:
int num, dato,conta
num=4
dato=2
per conta=1 a conta<=num
scrivi (dato)
dato=dato+num
num+=1
fine per
devo scegliere tra le risposte: a) 2688 b)ciclo infinito c)2222 d)261014
In c++ ho scritto questo codice:
#include <iostream>
using namespace std;
int main()
{
int num;
int dato;
int conta;
num=4;
dato=2;
for (conta= 1;conta<= num;conta=conta+1)
{
cout << dato << endl;
dato=dato+num;
num+=1;
}
system("Pause");
}
Come risposta mi da un ciclo infinito (spero che sia giusta). Ho dovuto creare anche lo stesso codice in Visual Basic ma qui non riesco a venirne a capo. Questo è il mio codice:
Module VBModule
Sub Main ()
dim num,dato,conta As integer
num=4
dato=2
For conta =1 To num Step
dato=dato+num
num+=1
Console.WriteLine ("dato = {0}",dato)
Next
End Sub
End Module
Come lo eseguo non mi da un ciclo infinito ma solo: 6-11-17-24
Potreste aiutarmi a capire dove sbaglio visto che sono alle prime armi. Grazie mille
non sono molto convinto di quello che ti ho evidenziato in grassetto
Sub Main ()
dim num,dato,conta As integer
num=4
dato=2
For conta =1 To num Step
dato=dato+num
num+=1
Console.WriteLine ("dato = {0}",dato)
Next
End Sub
End Module
For conta =1 To num
num = num + 1
Demonius
02-12-2021, 09:16
Per prima cosa grazie per la risposta. Ho provato a mettere come suggerito:
For conta =1 To num
num = num + 1
eliminando Step e modificando num+=1 in num = num + 1 ma niente da fare :mc:
nono ri-leggi meglio la parte in grassetto di misterx...
chi è l'indice nel for? viene gestito correttamente?
cosa rappresenta num? deve cambiare o no?
Ciao a tutti. Stavo svolgendo un'esercizio dove mi si chiede da questo frammento di codice di ricavare la risposta esatta:
Fr codice:
int num, dato,conta
num=4
dato=2
per conta=1 a conta<=num
scrivi (dato)
dato=dato+num
num+=1
fine per
devo scegliere tra le risposte: a) 2688 b)ciclo infinito c)2222 d)261014
[..]
Come risposta mi da un ciclo infinito (spero che sia giusta).
Non sono stato dietro a leggere tutto ma NON può dare un ciclo infinito per un motivo semplice: il tipo INT ha un valore massimo.
Poniamo che compili a 64 bit, un int raggiunge al massimo il valore 9.223.372.036.854.775.807
quindi non appena fai un "+1" il valore "fa il giro" è diventa -9.223.372.036.854.775.807
In quel momento quindi conta sarà sicuramente maggiore di num, e quindi il ciclo termina.
Demonius
02-12-2021, 10:17
Ragazzi penso di esserci riuscito grazie ai vostri suggerimenti (ma non sono sicuro al 100%).
Questo è quello che ho fatto:
For conta=conta To num step conta
dato=dato+num
num+=1
Console.WriteLine ("dato = {0}",dato)
Adesso mi da il ciclo infinito.
Demonius
02-12-2021, 10:21
Non sono stato dietro a leggere tutto ma NON può dare un ciclo infinito per un motivo semplice: il tipo INT ha un valore massimo.
Poniamo che compili a 64 bit, un int raggiunge al massimo il valore 9.223.372.036.854.775.807
quindi non appena fai un "+1" il valore "fa il giro" è diventa -9.223.372.036.854.775.807
In quel momento quindi conta sarà sicuramente maggiore di num, e quindi il ciclo termina.
:eek: quindi ho sbagliato da principio ?:mc:
Modifica il tuo programma in c++ e stampa a video sia il valore di conta che di num e lascialo andare. (hint: magari fai partire num da 2^31 che ci impiega meno)
Per prima cosa grazie per la risposta. Ho provato a mettere come suggerito:
For conta =1 To num
num = num + 1
eliminando Step e modificando num+=1 in num = num + 1 ma niente da fare :mc:
Non ho a disposizione un ambiente di sviluppo VB, ho provato un VBA per Excel in una vecchia versione del 2000 e num+=1 non è supportata, magari 20 dopo si?
Ma nemmeno il non specificare il valore di Step non è supportato, devi digitare qualcosa. Se non metti nulla, per default prende Step 1.
Per evitare errori negli esercizi, usa il solito metodo passo passo con carta e penna e fai la simulazione con solita tabella che sicuramente ti hanno insegnato a costruire nella quale elenchi per ogni passo, il contenuto delle variabili.
Perdi molto ma molto meno tempo.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.