PDA

View Full Version : [C#] Help Microsoft...


midian
12-07-2008, 23:19
salve a tutti ho un problea con il linguaggio C#:
sui pc di scuola questi programmi vanno:
using System;

namespace ConsoleApplication9
{
/// <summary>
/// Descrizione di riepilogo per Class1.
/// </summary>

class Conto
{
public string nome;
public string cognome;
public string cf;
public bool autenticato=false;
private string pass;

private float importo;

public Conto(string n, string c, string cc, string ps)
{
nome = n;
cognome = c;
cf = cc;
pass = ps;
}
public void autentica(string a)
{
if(a==pass)
autenticato=true;
}
private void preleva(int p)
{
if((autenticato=true)&&(p<importo))
importo=importo-p;
}
public void deposita(int d)
{
if(autenticato==true)
importo=importo+d;
}
public string Pass
{
get
{
if(autenticato==true)
return pass;
else
return "-1";
}
}
public float Importo
{
set
{
if(autenticato==true)
importo=value;
else
return "-1";
}
}
}
class Class1
{

static void Main(string[] args)
{
Conto n=new Conto("pippo", "baudo", "ppbbdo", "123");
n.autentica("123");
if (n.Pass=="-1")
Console.WriteLine("access denied");
else

Console.WriteLine("Acess grated" +n.Pass);
Console.WriteLine(n.Importo);
n.Importo=100000000;


Console.ReadLine();
}
}
}
e usiamo il programma visual studio 2003(o 2005) non ricordo, io ho scaricato la versione 2008, ma dà errore, perchè non dovrebbe andare bene il programma se funziona?!?!?!? :muro: :muro: :muro:

31337

gugoXX
12-07-2008, 23:40
Un pezzo come questo non puo' funzionare su nessun C#


public float Importo
{
set
{
if (autenticato == true)
importo = value;
else
return "-1";
}
}

Il metodo set di una proprieta' non deve/puo' ritornare nulla.
Men che meno una stringa come "-1" per una proprieta' dichiarata come float.

midian
12-07-2008, 23:43
meno male che ho il debito in informatica...:stordita:
quindi per riparare l' errore come dovrei fare?:stordita:
aggiungo, se tolgo il SET mi dice che manca un SET!

31337

||ElChE||88
12-07-2008, 23:55
Così?


class Conto
{
public string nome;
public string cognome;
public string cf;
public bool autenticato = false;
private string pass;
private float importo;

public Conto(string n, string c, string cc, string ps)
{
nome = n;
cognome = c;
cf = cc;
pass = ps;
}

public void autentica(string a)
{
if (a == pass)
autenticato = true;
}

private void preleva(int p)
{
if ((autenticato = true) && (p < importo))
importo = importo - p;
}

public void deposita(int d)
{
if (autenticato == true)
importo = importo + d;
}

public string Pass
{
get
{
if (autenticato == true)
return pass;
else
return "-1";
}
}

public float Importo
{
get
{
if (autenticato == true)
return importo;
else
return -1;
}
set
{
if (autenticato == true)
importo = value;
}
}
}

midian
13-07-2008, 00:09
using System;

namespace ConsoleApplication9
{
/// <summary>
/// Descrizione di riepilogo per Class1.
/// </summary>

class Conto
{
public string nome;
public string cognome;
public string cf;
public bool autenticato = false;
private string pass;

private float importo;

public Conto(string n, string c, string cc, string ps)
{
nome = n;
cognome = c;
cf = cc;
pass = ps;
}

public void autentica(string a)
{
if (a == pass)
autenticato = true;
}

private void preleva(int p)
{
if ((autenticato = true) && (p < importo))
importo = importo - p;
}

public void deposita(int d)
{
if (autenticato == true)
importo = importo + d;
}

public string Pass
{
get
{
if (autenticato == true)
return pass;
else
return "-1";
}
}

public float Importo
{
get
{
if (autenticato == true)
return importo;
else
return -1;
}
set
{
if (autenticato == true)
importo = value;
}
}
class Class1
{

static void Main(string[] args)
{
Conto n = new Conto("pippo", "baudo", "ppbbdo", "123");
n.autentica("123");
if (n.Pass == "-1")
Console.WriteLine("access denied");
else

Console.WriteLine("Acess grated" + n.Pass);
Console.WriteLine(n.Importo);
n.Importo = 100000000;


Console.ReadLine();
}
}
}
}
scritto cosi il programma torna alla perfezione :sofico:
Ragazzi siete dei miti, siccome i corsi di recupero non servono a nulla, se chiedo informazioni a voi, mi aiutate?
Dovevo andare bene, ma visto che su un ultim'ora da 50 minuti la professoressa veniva 5-10 minuti prima che suonasse la campanella e le ore settimanali da 7 si riducevano a 2, molti non ce l' hanno fatta a capire bene questo linguaggio, e chi ci è riuscito è solo scoppiazzando...:muro:

31337

Big Bamboo
13-07-2008, 10:51
using System;

private void preleva(int p)
{
if ((autenticato = true) && (p < importo))
importo = importo - p;
}



qui c'è un errore
using System;

private void preleva(int p)
{
if ((autenticato == true) && (p < importo)) /*ci va l'operatore di confronto e non di assegnazione
importo = importo - p;
}

midian
13-07-2008, 11:35
Un pezzo come questo non puo' funzionare su nessun C#


public float Importo
{
set
{
if (autenticato == true)
importo = value;
else
return "-1";
}
}

Il metodo set di una proprieta' non deve/puo' ritornare nulla.
Men che meno una stringa come "-1" per una proprieta' dichiarata come float.
rileggendo bene, sembra strano anche a me, visto he quello che si esegue l' utente non lo vede, e il GET\SET si dovrebbe applicare solo per leggere\modificare stringhe di valori, non pezzi div esecuzione, insomma, non deve modificare il codice che và in esecuzione, giusto? :fagiano:

31337

midian
30-07-2008, 19:13
Ho chiesto di darmi un altro esercizio, e doveva essere fatto cosi (almeno pensavo)...
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace automobile
{
class Automobile
{
static void Main(string[] args)
{
int a;
int b;
int c;
int d;
double e;
Console.WriteLine("Inserisci i litri presenti nel serbatoio");
a = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Inserisci i litri inseriti nel serbatoio");
b = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Inserisci il percorso in km");
c = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Inserisci i litri rimasti nel serbatoio");
d = Convert.ToInt32(Console.ReadLine());
e = (c / (a + b - d));
Console.WriteLine("La media dell' auto è di " + e);
Console.ReadLine();
}
}
}


Questo codice è stato fatto utilizzando una sola classe, io da perfetto utonto felice glielo ho mandato e mi ha detto che non andava bene, e mi ha scritto questo:

La classe automobile non và fatta in quel modo , devi creare una classe automobile con gli attributi e i metodi che ti vengono richiesti, ma FUORI dalla classe che contiene il main.
La classe contenente il main che in genere si chiama program la userai solo per istanziare un oggetto di tipo automobile e per utilizzarne i metodi, cioè:


namespace automobile
{
class Automobile{
.
.
.
}
class program {

static void Main(string[] args){

automobile aa=new automobile();// stò istanziando l'oggetto

aa.metodo1( );
aa.metodo2( );

}
}
}

altrimenti non stiamo utilizzando la programmazione ad oggetti.

Ma non ho capito bene come fare, cioè devo mettere nella clase principale int a,b,e ecc e il metodo "e = (c / (a + b - d));" nell' altra classe?
Scusate non ho capito bene, mi servirebbe il codice per capire, anche chi non ha avuto il debito non riesce (:rolleyes: ).

31337

Big Bamboo
30-07-2008, 19:53
da come ti sei spiegato devi mettere il codice della classe automobile in un file a parte (automobile.cs) senza che contenga il main.

poi fa una classe test, nella quale dichiari il main, istanzi una nuova automobile e chiami i suoi metodi

midian
31-07-2008, 00:51
da come ti sei spiegato devi mettere il codice della classe automobile in un file a parte (automobile.cs) senza che contenga il main.

poi fa una classe test, nella quale dichiari il main, istanzi una nuova automobile e chiami i suoi metodi
una cosa simile quindi:
public class HelloWorld
{
public struct Persona
{
public string Nome;
public string Cognome;

public Persona(string Nome, string Cognome)
{
this.Nome = Nome;
this.Cognome = Cognome;
}

public string NomeCompleto
{
get { return Nome + " " + Cognome; }
}
}

public static void Main()
{
Persona p = new Persona("Marco", "Minerva");
System.Console.WriteLine("Ciao " + p.NomeCompleto + "!");
System.Console.ReadLine();
}
}

ecco il link da dove ho preso esempio, ho postato il testo della mail mandatami dal professore...

http://programmazione.html.it/guide/lezione/1130/i-tipi-di-dati-base-e-passaggio-dei-parametri/

Big Bamboo
31-07-2008, 08:57
si esatto, se vuoi essere più preciso, scrivi una classe per file

khelidan1980
31-07-2008, 11:52
non so come funzioni con C# nel dettaglio ma il concetto che voleva farti capire la prof e che ti devi fare una classe automobile a parte che ti modella tutto ciò che l'automobile deve fare e poi nel main vai ad istanziare tutti gli oggetti che ti servono,è proprio una questione di design,non puoi mischiare tutto

midian
01-08-2008, 11:00
partendo da questo codice:
class Conto
{
public string nome;
public string cognome;
public string cf;
public bool autenticato = false;
private string pass;
private float importo;

public Conto(string n, string c, string cc, string ps)
{
nome = n;
cognome = c;
cf = cc;
pass = ps;
}

public void autentica(string a)
{
if (a == pass)
autenticato = true;
}

private void preleva(int p)
{
if ((autenticato = true) && (p < importo))
importo = importo - p;
}

public void deposita(int d)
{
if (autenticato == true)
importo = importo + d;
}

public string Pass
{
get
{
if (autenticato == true)
return pass;
else
return "-1";
}
}

public float Importo
{
get
{
if (autenticato == true)
return importo;
else
return -1;
}
set
{
if (autenticato == true)
importo = value;
}
}
}
ho provato ad eliminare le parti per me inutili e convertirlo per la classe dedicata al consumo medio, però non riesco a cavarne piede...qualche anima buona mi aiuterebbe a sviluppare questo codice?:D Ve ne sarei grato! Intanto continuo a provarci :muro:

31337

Big Bamboo
01-08-2008, 11:32
private void preleva(int p)
{
if ((autenticato = true) && (p < importo))
importo = importo - p;
}

manca un uguale tra autenticato e true

per il resto il codice è ok. adesso fai un altro file, ci metti dentro una classe usata solo per il test e nel main istanzi la classe Conto e usi i suoi metodi

midian
01-08-2008, 23:49
scusate, sarà per colpa dei professori, del caldo, o degli impegni, ma proprio questo non mi scende! :muro:
using System;

namespace ConsoleApplication9
{
/// <summary>
/// Descrizione di riepilogo per Class1.
/// </summary>

class Automobile
{
public int litri1;
public int litri2;
public int consumo;

private float importo;

public Automobile(int l1, int l2, int cms)
{
litri1 = l1;
litri2 = l2;
consumo = cms;
}

public void Consumo(int l1, int l2, int cms)
{
cms = (l1-l2);
}

class Class1
{

static void Main(string[] args)
{
Automobile n = new Automobile(30, 20, 10);
Console.WriteLine(cms);
Console.ReadLine();
}
}
}
}
il programma mi da errore, e qualcosa di sbagliato cè, però non capisco cosa!
forse l' unico sarebbe vedere l' esercizio svolto, e da questo CARPIRE come ha funzionato :stordita:

31337

ndakota
02-08-2008, 00:12
scusate, sarà per colpa dei professori, del caldo, o degli impegni, ma proprio questo non mi scende! :muro:
using System;

namespace ConsoleApplication9
{
/// <summary>
/// Descrizione di riepilogo per Class1.
/// </summary>

class Automobile
{
public int litri1;
public int litri2;
public int consumo;

private float importo;

public Automobile(int l1, int l2)
{
litri1 = l1;
litri2 = l2;
}

public int Consumo()
{
consumo = litri1-litri2;

return consumo;
}

class Class1
{

static void Main(string[] args)
{
Automobile n = new Automobile(30, 20);
Console.WriteLine(n.consumo());
Console.ReadLine();
}
}
}
}
il programma mi da errore, e qualcosa di sbagliato cè, però non capisco cosa!
forse l' unico sarebbe vedere l' esercizio svolto, e da questo CARPIRE come ha funzionato :stordita:

31337

prova un po.. non conosco il c# e non l'ho provato però ci sono anche un po di errori logici mi pare..

Big Bamboo
02-08-2008, 12:00
Console.WriteLine(cms);

Non puoi stampare cms, non esiste.
Puoi appunto usare n.consumo() come consigliato da ndakota e nel frattempo rendere privati gli attributi della classe.
Che ambiente di sviluppo usi?

midian
03-08-2008, 15:28
Console.WriteLine(cms);

Non puoi stampare cms, non esiste.
Puoi appunto usare n.consumo() come consigliato da ndakota e nel frattempo rendere privati gli attributi della classe.
Che ambiente di sviluppo usi?

io uso visual studio 2008, e che proprio non capisco bene come funzioni questo delle classi, in cui in una si mettono gli esempi, e nell' altra quello che si deve esegure...avete qualche programmino veloce cosi da capire come funziona? :D
Sono un po pietra in questa parte...manca poco ormai :cry:

31337

midian
05-08-2008, 11:31
using System;

namespace ConsoleApplication9
{
/// <summary>
/// Descrizione di riepilogo per Class1.
/// </summary>

class Automobile
{
public int litri1;
public int litri2;
public int consumo;

private float importo;

public Automobile(int l1, int l2)
{
litri1 = l1;
litri2 = l2;
}

public void Consumo(int l1, int l2)
{
consumo = (l1 + l2);
}

class Class1
{

static void Main(string[] args)
{
Automobile n = new Automobile(5, 20);
Console.WriteLine(n.consumo);
Console.ReadLine();
}
}
}
}

ora torna...ma sempre 0 !!!!:sofico:
mamma mia che casino questa programmazione...:muro:

31337

midian
05-08-2008, 11:36
ora ho un dubbio, non è che mi dia 0 perchè non ho dichiarato bene i valori di l1 e l2?????:mbe:

31337

SerMagnus
05-08-2008, 11:41
mi sà che stai facendo un po' di confusione tra metodi e proprietà di una classe... ti consiglierei prima una ripassatina della teoria, andare a casaccio n porta a nulla, se non a fare semrpe gli stessi errori

midian
05-08-2008, 13:11
mi sà che stai facendo un po' di confusione tra metodi e proprietà di una classe... ti consiglierei prima una ripassatina della teoria, andare a casaccio n porta a nulla, se non a fare semrpe gli stessi errori

mi sà però questa parte è stata spiegata senza l' uso delle dispense...:cry:

31337