View Full Version : Linguaggio C : delucidazioni
Salve a tutti:
vorrei chiedere ai piu esperti o a coloro che conoscono cmq il linguaggio C di aiutarmi in due "programmi"
Vorrei sapere come è possibile svolgere le seguenti traccie con relativa descrizione passaggio per passaggio.
1) Scrivere un programma che legga 3 numeri e ne stampi il massimo
(con descrizione istruzione per istruzione ed il perchè dei passaggi )
2) Scrivere un programma che , dati un numero diverso da 0, ed una sequenza di numeri terminata da uno 0, stampi in uscita 1 se il primo numero esiste nella sequenza, 0 in caso contrario
(idem come su )
ps: sarebbe possibile sapere a cosa servono in C i simboli %, & ???
es: due serie di numeri separate da uno & e chiuse da un % ...... cosa significa?
grazie a tutti in anticipo
1) Scrivere un programma che legga 3 numeri e ne stampi il massimo
(con descrizione istruzione per istruzione ed il perchè dei passaggi )Suppongo che i numeri li devi leggere in input dalla tastiera. In sostanza devi utilizzare una (o più) funzioni che permettono di leggere dei dati in input. Una funzione utilizzabile è la scanf (che a me personalmente non piace :p ) ma puoi usare ad esempio fgets per ottenere una stringa e poi convertirla in un numero con la atoi.
A quel punto determinare il valore maggiore è semplice, avendo 3 numeri basta fare 2 test in sequenza per ottenerlo.
2) Scrivere un programma che , dati un numero diverso da 0, ed una sequenza di numeri terminata da uno 0, stampi in uscita 1 se il primo numero esiste nella sequenza, 0 in caso contrario
(idem come su )Qui ci sono diverse soluzioni. Se il numero da ricercare è da inserire per primo, una volta inserito puoi determinare subito se il numero compare o no nella sequenza man mano che richiedi gli altri numeri. Altrimenti l'altra soluzione sarebbe quella di inserire la sequenza di numeri in un array e poi successivamente ricercare il numero nell'array. In questo caso è però necessario capire quanti numeri nella sequenza devi poter gestire.
ps: sarebbe possibile sapere a cosa servono in C i simboli %, & ???Il % è l'operatore del modulo, consente di ottenere il resto di una divisione intera (es. 10 % 3 dà 1).
Il & ha 2 significati e dipende da come lo usi. Messo prima di una variabile, consente di ottenere l'indirizzo della variabile. Nel caso di utilizzo con 2 operandi, effettua l'operazione booleana di AND bitwise cioè sui singoli bit degli operandi.
es: due serie di numeri separate da uno & e chiuse da un % ...... cosa significa?Se fai un esempio è meglio, dove l'hai visto? .... non è molto chiaro.
entrambi i programmi devo farli con
scanf
printf
while
if
linguaggio base insomma.....
help me please
Sono degli esercizietti facenti parte di un corso immagino
Se te lis criviamo noi, la loro funzione didattica che fine fa?
prova ad iniziarli, se hai dubbi chiedi
io li ho fatti
il problema è che purtroppo non ho risoluzioni , ma solo tracce, domani ho un test e qst due traccie (facenti parte di esercizi) mi stanno preoccupando nn poco
In realtà li ho fatti meccanicamente guardando un po su internet ma nn so se vadano bene, e cmq sia vorrei capire i passaggi ( il ragionamento logico )
:(
jappilas
14-06-2006, 22:44
io li ho fatti
il problema è che purtroppo non ho risoluzioni , ma solo tracce, domani ho un test e qst due traccie (facenti parte di esercizi) mi stanno preoccupando nn poco
In realtà li ho fatti meccanicamente guardando un po su internet ma nn so se vadano bene, e cmq sia vorrei capire i passaggi ( il ragionamento logico )
:(
prova a postare il codice, mal che vada ti si dice in cosa sono sbagliati ;)
anche se postassi cmq nn servirebbe a nulla, in quanto non ho cmq capito realmente cosa ho scritto.
Per qst programmi ho copiato e visto da internet , senza capire.
E' che non riesco ad arrivare da solo alla stesura di un programma in merito a qst
due esempi....
(sarò scemo io...)
scusa, non si è capito cosa vorresti da noi :D
non serve che te li scriviamo perché già li hai copiati da internet, non ce li puoi postare perché anche se ti spiegassimo non capiresti, a spiegare t'ha già spiegato andbin... che dobbiamo fare? :D
ce l'hai un libro di testo? fai come se questo forum non esistesse: cerca di capire da solo, leggi i programmi passo passo e studia sul libro ogni singola cosa
scusa, non si è capito cosa vorresti da noi :D
non serve che te li scriviamo perché già li hai copiati da internet, non ce li puoi postare perché anche se ti spiegassimo non capiresti, a spiegare t'ha già spiegato andbin... che dobbiamo fare? :D
ce l'hai un libro di testo? fai come se questo forum non esistesse: cerca di capire da solo, leggi i programmi passo passo e studia sul libro ogni singola cosa
guarda sei stato utilissimo ma soprattutto gentilissimo.
Se fossi stupido mi offenderei.....
cioè mi vieni a dire di studiare?
E' un mese che faccio esercizi e cerco di capire ogni singola cosa, credo sia normale avere difficoltà dato che sui libri non sempre sono spiegati i passaggi, e dato che non ho nessuno a cui chiedere...vabe lasciam perdere.
Cmq grazie a tutti....( e qst è perchè ho chiesto la spiegazione del ragionamento passo passo.....azz!!!)
Per il primo:
#include <stdio.h>
#include <stdlib.h>
main()
{
int i,num,temp=0; //Dichiari le variabili ossia predisponi uno spazio di memoria in grado
//di contenere variabili di quel tipo, in questa caso di tipo int
for(i=0;i<3;i++){
printf("Inserisci il numero %d",i+1);
scanf("%d",&num);
if(num>temp) temp=num;
}
printf("Il maggiore e' %d", temp);
getch();
}
Vediamo...il ciclo for come si evince dalla parola stessa esegue un ciclo, ossia ripete una o più istruzione finchè è VERA una certa istruzione.
L'istruzione che deve essere VERA nel nostro caso è i<3, essa è ovviamente vera finchè i<3, e visto che i parte da 0 e viene incrementata,con i++, ad ongi ciclo, essa rimarà vera per 3 volte.
Significa quindi che le istruzione tra le graffe(soot al for) vengono ripetute per 3 volte.
printf stampa sulla consolle una stringa(quella tra le ""), sostituendo il simbolo %d con la prima variabile che trova dopo la stringa, nel nostro caso stamperà:
Inserisci il numero 1,Inserisci il numero 2,Inserisci il numero 3...
scanf prende dentro invece una variabile e la salva in una locazione di memoria, per farlo bisogna dirgli dove si trova questa locazione e quindi gli si passa il suo indirizzo con &nomevariabile(qui ti serve un buon libro per capirci).
Con l'if non faccio altro che controllare ogni volta se il nuovo valore immesso è maggiore della variabile temp, se si lo salvo nella varibile temp stessa.
Quindi si avrà che nella variabile temp risiederà il maggiore tra quelli imessi, non ti resta che stampare questa varibile.
Nota che questo è solo un dei metodi, ce ne sono altri.
Ti posso anche dire che questo esercizio è molto banale, quindi presuppongo che hai appena iniziato a guardare il C e non hai mai visto altri linguaggi di programmazione, se è così ti conviene come ti hanno cosigliato studiare un po' da solo e poi chiedere...
...
ps: sarebbe possibile sapere a cosa servono in C i simboli %, & ???
es: due serie di numeri separate da uno & e chiuse da un % ...... cosa significa?
grazie a tutti in anticipo
I simboli % & hanno diversi utilizzi a seconda di dove si trovano...
Per esempio :
int ris=5%2; //esegue la divisione tra 5 e 2 e salva il resto in ris(resto=1)
printf("Sono le %d emmezza!", 11); //Stampa: Sono le 11 emmezza!
ecc ecc...
Mentre ad esempio:
if(a&&b) esegue l'and tra a e b su tutti i bit
if(a&b) esegue l'and binario
viene poi anche usato per esprimere l'indirizzo di memoria di una variabile, ma qui devi per forza leggerti dei libri, e comunque è meglio che ti impari questo dopo che hai imparato i fondamenti.
Comunque ti ripeto è meglio se prima studi da solo, e dovresti anche sapere un pochettino come funziona un calcolatore...
trallallero
15-06-2006, 07:53
... e dovresti anche sapere un pochettino come funziona un calcolatore...
penso sia proprio li il problema ;) non per giustificare "revo", ma magari gli stanno cercando di insegnare il C senza aver spiegato prima cos'e' una RAM.
"l'indirizzo di memoria di una variabile" a noi sembra scontato ma ad uno che non sa come funge un pc sembra arabo :eek:
Pero' pure tu revo ... chiedere delucidazioni la sera prima del test :nonsifa:
if(a&&b) esegue l'and tra a e b su tutti i bitQuesto è l'AND logico ... non c'entrano i bit. ;)
il problema è che purtroppo non ho risoluzioni
compilali...
Questo è l'AND logico ... non c'entrano i bit. ;)
i bit c entrano se invece di && si ha solo &.
Cmq, io frequento scienze della consevazione dei beni culturali, ed il corso di informatica (2) prevede il linguaggio base di C;
per ciò che riguarda macchina di von Neumann, ram e via dicendo ok; poi ci han fatto vedere i tipi di istruzioni (assegnamento, iterativa, condizione , composte , etc etc ) e poi siam passati agli esercizi.
Ci sn quelli davvero semplici ( anche con ciclo While (condizione) e corpo istruzione(del ciclo) ), e poi c sn cmq quelli che sn piu difficili, non perchè nn sappia qst cose ma perchè è difficile ( per me ) il ragionamento per arrivare ad una conclusione.
Ieri ho semplicemente chiesto come svolgere (con spiegazione relativa) qst due ragionamenti logici poichè facendo i miei soliti esercizi, nn ci ero riuscito.
Non mi sembra chissa qnt strano
Questo è l'AND logico ... non c'entrano i bit. ;)
Si scusate era tardi volevo poi dire quello :mc:
ma io posso fare in questo modo?!
main()
{
scanf (x);
scanf (y);
scanf (z);
if (x>y==x>z)
printf (x)
else
if (y>x==y>z)
printf (y)
else
printf (z)
i bit c entrano se invece di && si ha solo &.Certo, esatto!
Ieri ho semplicemente chiesto come svolgere (con spiegazione relativa) qst due ragionamenti logici poichè facendo i miei soliti esercizi, nn ci ero riuscito.
Non mi sembra chissa qnt stranoOk, comunque una spiegazione ti è già stata data, sia da me che da altri ...
trallallero
15-06-2006, 10:17
ma io posso fare in questo modo?!
main()
{
scanf (x);
scanf (y);
scanf (z);
if (x>y==x>z)
printf (x)
else
if (y>x==y>z)
printf (y)
else
printf (z)
oh mamma! :eek:
x y z vanno dichiarate prima
la funzione scanf ha bisogno di sapere il tipo di dato che ricevera'.
la printf deve sapere il tipo di dato che stampera' .
ma l'esempio che t'ha mostrato MEMon non ti piace ?
a parte la "getch()" (mi sa che usa il Borland :D ) che potrebbe darti errore in compilazione, il resto e' giusto.
e poi con "if (x>y==x>z)" cosa stai cercando di fare ?
prova a tradurla in italiano:
"se x e' maggiore di y e' uguale a x maggiore di z"
non ha nessun significato ;)
ma io posso fare in questo modo?!
main()
{
scanf (x);
scanf (y);
scanf (z);
if (x>y==x>z)
printf (x)
else
if (y>x==y>z)
printf (y)
else
printf (z)Ci sono delle cose che non vanno:
- devi innanzitutto dichiarare le variabili
- l'espressione x>y==x>z non ha molto senso
- alla printf non puoi passare una variabile numerica così, idem per la scanf
che erroraccio.....volevo mettere AND
if (x>y&&x>z)
ma io posso fare in questo modo?!
main()
{
scanf (x);
scanf (y);
scanf (z);
if (x>y==x>z)
printf (x)
else
if (y>x==y>z)
printf (y)
else
printf (z) òooh, bravo: finalmente hai scritto del codice, ora ti possiamo spiegare cos'è che non va e allora tu capirai e correggerai; vedi? è così che funziona ;)
allora:
1) x, y, e z non sono dichiarate; prima di poter usare delle variabili, devi usare delle istruzioni che dichiarino la loro esistenza nel programma; suppongo ti abbiano spiegato la sintassi di queste istruzioni:
<tipo> <nome> [= <inizializzazione>] ;
dove <tipo> rappresenta il tipo di variabile (char, int, float, double, tipi personalizzati definiti da te...), <nome> sarà il suo nome (x, y, z, o qualsiasi altro nome valido) e la parte finale (messa tra parentesi quadre per dire che è opzionale) è la sua eventuale inizializzazione con un valore costante compatibile con quel tipo. esempi:
int n = 0; // variabile intera n inizializzata a 0
int a; // variabile intera a non inizializzata
char c = 'A'; // carattere ASCII inizializzato al valore ASCII della lettera A
eccetera eccetera; poi volendo nella definizione del tipo usato nella dichiarazione puoi anche usare l'asterisco per definire puntatori semplici, doppi, tripli, ennupli:
char *s; // puntatore (NON inizializzato!) a un array di caratteri, volendo una stringa
char **s2 = &s; // puntatore che punta a s
eccetera. poi:
2) scanf e printf non si usano così: tanto per cominciare il primo parametro deve essere la stringa che definisce il formato, e poi la scanf non vuole parametri passati per valore ma per indirizzo: la scanf nello stack si aspetta di trovare gli indirizzi delle variabili da richiedere in input all'utente, se tu passi il valore delle variabili la scanf penserà che quei valori sono in realtà gli indirizzi, e con ottime probabilità la farai accedere ad aree di memoria non allocate, la qual cosa manderà semplicemente in crash il tuo programma.
per leggere una variabile intera scritta dall'utente nella console devi fare:
int var;
scanf("%d", &var); // notare l'uso di & che serve a passare l'indirizzo, non il valore
mentre per stampare il valore di una variabile sulla console fai:
int var = 5;
printf("%d\n", var); // stamperà 5 seguito da un'andatura a capo, \n
3) poi altra cosa: alle istruzioni delle scanf iniziali hai giustamente messo i punti e virgola finali, ma invece alle printf dentro gli if e gli else te li sei scordati
4) sarebbe anche bene usare sempre le parentesi graffe per circondare il corpo di un if o un else o un ciclo, anche quando non è strettamente necessario perché il corpo è costituito da una sola istruzione
5) if (x>y==x>z) ... :mbe: :wtf: ma che volevi dire?? :wtf:
ah, ultima cosa: non è strettamente indispensabile, ma prima di "main()" è meglio che ci metti int, è un'usanza più rispettosa dello standard:
int main() {
// tuo codice...
.
.
.
}
e visto che dichiari main come una funzione che ritorna int, alla fine della funzione mettici anche un return che ritorni qualcosa, va bene anche 0 (è convenzione ritornare 0 se l'esecuzione del programma va a buon fine, e un valore negativo definito da te se accade qualche errore; per i programmi che devi fare tu l'errore non capiterà mai, quindi ritorna direttamente 0 :)).
ripeto, la main è accettabile anche come l'hai scritta tu, ma come ti ho detto io è più rispettoso dello standard
che erroraccio.....volevo mettere AND
if (x>y&&x>z) ah ok, non avevo letto ^^
trallallero
15-06-2006, 11:15
allora, passo per passo:
inizi con
#include <stdio.h>
stai dicendo di inserire il file "stdio.h" nel programma perche' usi delle funzioni definite li (printf per esempio)
il C non ha funzioni di suo ma solo parole riservate (void int while for ...) operatori (< > ! ...) e ... per adesso basta cosi' ;)
poi passi al
void main()
{
che e' la funzione capo nel C. Il programma inizia li.
Poi ti servono le variabili, contenitori di valori, quindi vanno dichiarate:
int x, y, z;
"int" e' il tipo di dato che puo' contenere la variabile, in questo caso intero, numerico.
a questo punto vorrai dire a chi usa il programma cosa deve fare ? si, quindi:
printf( "Inserire un valore: \n" );
"\n" e' un modo per dire alla funzione printf di andare a capo (si chiama "sequenza di escape" ma e' presto per te).
adesso otteniamo il valore:
scanf("%d", &x );
e qui provo a spiegare: :D
la funzione scanf vuole come parametri prima il tipo di dato da prelevare.
%d significa intero
%f significa reale
%c significa carattere
etc ...
poi vuole un posto dove mettere il dato letto. Tu digiti "2", per esempio, la scanf deve scrivere questo 2 da qualche parte per memorizzarlo e lo scrive dentro la variabile x. Ma per dire dove sta la variabile x usi il carattere & ... quindi &x
So che il discorso e' complesso per uno all'inizio ma piano piano, senza fretta si ottiene (se lo vuoi) quello che vuoi.
Ripeti la cosa per y e z e a questo punto hai 3 variabili con 3 valori diversi.
Seguendo il tuo programma adesso devi confrontare le 3 variabili e prendere il maggiore.
if ( x > y && x > z )
printf( "Il valore piu' alto e': %d", x );
else if ( y > x && y > z )
printf( "Il valore piu' alto e': %d", y );
else
printf( "Il valore piu' alto e': %d", z );
Anche qui c'e' il discorso del %d di cui sopra.
Pero' stavolta non c'e' bisogno del carattere & perche' non serve sapere dove sta la variabile ma solo il contenuto.
Chiudiamo il main:
}
Fine. Spero di esserti stato d'aiuto.
Ovviamente non si fa cosi' un programma.
Tutto cio' che e' "ciclabile" andrebbe ciclato.
La scanf fatta per 3 volte di fila non e' molto elegante ;)
ciao
trallallero
15-06-2006, 11:18
ah, ultima cosa: non è strettamente indispensabile, ma prima di "main()" è meglio che ci metti int, è un'usanza più rispettosa dello standard:
E' vero ...
io invece ho il vizio di mettere
void main()
su Sun va bene ma, giustamente, Linux s'incazza :muro:
va bene cosi!?
cmq, ho messo scanf (x) poichè sta ad indicare che vien letto dal programma x , che in teoria sarebbe un numero;
poi vien letto il secondo ....y e poi il terzo .....z
che c è di sbagliato?
in un esercizio fatto durante il corso per stabilire quale fra due numeri fosse il massimo abbiam fatto cosi:
main ()
scanf x
scanf y
if ( x>y )
z=x;
else
z=y;
printf (z)
trallallero
15-06-2006, 11:22
'azz ... revo, ce n'hai da leggere adesso eh ;)
se vuoi un consiglio cerca "Tricky C" su internet e scaricalo.
E' un ottimo manuale in italiano ;)
oddio ...è sbagliato anche quello!?
Certo che è sbagliato, forse nel corso l'hanno fatto così per fravi capire la procedura...ma è sintatticamente sbagliato, quello giusto te l'hanno già spiegato.
oddio, ma cm sopra noi nn l abbiam mai fatto
sia nel corso, sia nel libro è affrontato il C in base ad un metodo semplificato di operazioni di ingresso ed uscita, evitanto esplicitamente gli elelemnti ( cm sopra) impiegati nei programmi.
help me...
piu semplice nn si puo fare!?
Una soluzione corretta è questa:
#include <stdio.h>
int main (void)
{
int n1, n2, n3, massimo;
printf ("Inserire il primo numero: ");
scanf ("%d", &n1);
printf ("Inserire il secondo numero: ");
scanf ("%d", &n2);
printf ("Inserire il terzo numero: ");
scanf ("%d", &n3);
massimo = n1;
if (n2 > massimo)
massimo = n2;
if (n3 > massimo)
massimo = n3;
printf ("Il valore massimo e`: %d\n", massimo);
return 0;
}Più corto di così ... si muore! Beh, si potrebbero ancora compattare i 2 if usando l'operatore ternario ? ma poi dovrei spiegartelo ...
il massimo è uaguale ad n1?
ma se a me il programma serve per stabilire il max cm faccio apriori a sapere che n1 è il massimo!?
trallallero
15-06-2006, 12:03
piu semplice nn si puo fare!?
ecco ... io piu' corta di cosi non ci riesco :D
int main()
{
int i, num, max = 0;
for (i = 0; i < 3 && printf( "inserire un val: \n" ) && scanf( "%i", &num ); i++, max = (num > max) ? num : max )
;
return printf( "il max e': %i\n", max );
}
trallallero
15-06-2006, 12:15
il massimo è uaguale ad n1?
ma se a me il programma serve per stabilire il max cm faccio apriori a sapere che n1 è il massimo!?
non pensarla piu' difficle di quella che e' ;)
esempio:
a = 1
b = 2
c = 3
io (non conosco i valori) do per scontato che il max sia a, cosi' per default, per iniziare.
Poi controllo: se b > max allora max = b
E se c > max max = c;
non pensarla piu' difficle di quella che e' ;)
esempio:
a = 1
b = 2
c = 3
io (non conosco i valori) do per scontato che il max sia a, cosi' per default, per iniziare.
Poi controllo: se b > max allora max = b
E se c > max max = c;
adesso ho capito
cmq tnx a tutti
ecco ... io piu' corta di cosi non ci riesco :D Oh ... sì ... certo! :D
È perfettamente comprensibile da me, da te, da 71104 e da altri comunque esperti. Ma chiedi a revo se capisce cosa hai appena scritto ...
P.S. finché scrivi il codice così per diletto o per "far vedere" quanto sei bravo a mettere tutto su una riga ... va bene. Per il resto, secondo la mia opinione, il tuo codice == monnezza. La vera programmazione è un'altra cosa... Scusa eh ... :p
secondo il C semplificato ( ma che nn corrisponde a programmazione )
dovrebbe essere cosi allora:
main ()
{
int a,b,c
scanf (a);
scanf (b);
scanf (c);
if (a>b&&b>c)
prinf ( 'il massimo è a'
e cosi per b e c
OPPURE
main ()
{
int a,b,c
scanf (a)
scanf (b)
scanf (c)
max=a
if (b>max)
max=b
e cosi via
...è ok!?!?!?
trallallero
15-06-2006, 12:37
Oh ... sì ... certo! :D
È perfettamente comprensibile da me, da te, da 71104 e da altri comunque esperti. Ma chiedi a revo se capisce cosa hai appena scritto ...
P.S. finché scrivi il codice così per diletto o per "far vedere" quanto sei bravo a mettere tutto su una riga ... va bene. Per il resto, secondo la mia opinione, il tuo codice == monnezza. La vera programmazione è un'altra cosa... Scusa eh ... :p
ma si l'ho scritta solo per scherzare e per provocare :)
Anch'io detesto il codice compresso e pieno di "mandrakate" e sono a favore della leggibilita', solo che m'ha fatto ridere il "piu semplice nn si puo fare!?" :eek:
secondo me revo intendeva "con meno istruzioni" e col mio post volevo far notare che se diminuisci le istruzioni ...
diventata 'na merdata :D
secondo il C semplificato ( ma che nn corrisponde a programmazione ) :mbe: Non so chi ti ha parlato di questo "C semplificato" ma ... o scrivi in "C" oppure non scrivi in "C".
E una volta che l'avresti fatto in questo "C semplificato", che ti serve a fare???
trallallero
15-06-2006, 12:49
revo, non esiste il C semplificato ...
puoi scrivere una specie di analisi prima del codice
ma dopo il codice va scritto! e va scritto bene!
spesso si usa(va) un sistema del genere (nei corsi almeno):
leggo a;
leggo b;
leggo c;
se a > b AND b > c allora
...
altrimenti
...
stampa a;
...
questo e' a prescindere dal linguaggio che userai ma serve solo a dare una linea al programma. non e' il codice.
NOn ha senso scrivere "scanf(x)" perche' in C e' sbagliata come istruzione e se la usi come linea non si capisce!
ma si l'ho scritta solo per scherzare e per provocare :)
Anch'io detesto il codice compresso e pieno di "mandrakate" e sono a favore della leggibilita', solo che m'ha fatto ridere il "piu semplice nn si puo fare!?" :eek:
secondo me revo intendeva "con meno istruzioni" e col mio post volevo far notare che se diminuisci le istruzioni ...
diventata 'na merdata :DAh, ok ;) Credevo che dicessi sul serio. :doh:
revo, o scrivi in C o scrivi in pseudocodice; ecco le mie soluzioni in entrambi i modi:
#include <stdlib.h>
#include <stdio.h>
int main() {
int x, y, z;
scanf("%d", &x);
scanf("%d", &y);
scanf("%d", &z);
if (x > y) {
if (x > z) {
printf("%d\n", x);
}
else {
printf("%d\n", z);
}
}
else {
if (y > z) {
printf("%d\n", y);
}
else {
printf("%d\n", z);
}
}
return 0;
}
acquisisci x
acquisisci y
acquisisci z
SE x > y ALLORA
SE x > z ALLORA
stampa x
ALTRIMENTI
stampa z
ALTRIMENTI
SE y > z ALLORA
stampa y
ALTRIMENTI
stampa z
FINE
qualsiasi altra cosa semplicemente non ha senso . (punto)
:)
E' vero ...
io invece ho il vizio di mettere
void main()
su Sun va bene ma, giustamente, Linux s'incazza :muro: non dovrebbe: indipendentemente da come tu dichiari il main, la chiamata al main funziona sempre allo stesso modo (trattandosi di convenzione __cdecl): il chiamante (qualche libreria del kernel, su Windows è kernel32.dll) mette nello stack i parametri da destra a sinistra, effettua il CALL, il main fa quello che deve fare, opzionalmente scrive il valore di ritorno in EAX, ritorna con RET, ed infine il chiamante toglie i parametri dallo stack. se dichiari quella funzione come void eax rimane sporco, forse il compilatore genera automaticamente il codice di epilogo per azzerarlo ma non sono sicuro (su Windows è un po' diverso).
ecco ... io piu' corta di cosi non ci riesco :D
int main()
{
int i, num, max = 0;
for (i = 0; i < 3 && printf( "inserire un val: \n" ) && scanf( "%i", &num ); i++, max = (num > max) ? num : max )
;
return printf( "il max e': %i\n", max );
}
MA LOL :rotfl:
trallallero
15-06-2006, 14:25
non dovrebbe: indipendentemente da come tu dichiari il main, la chiamata al main funziona sempre allo stesso modo (trattandosi di convenzione __cdecl): il chiamante (qualche libreria del kernel, su Windows è kernel32.dll) mette nello stack i parametri da destra a sinistra, effettua il CALL, il main fa quello che deve fare, opzionalmente scrive il valore di ritorno in EAX, ritorna con RET, ed infine il chiamante toglie i parametri dallo stack. se dichiari quella funzione come void eax rimane sporco, forse il compilatore genera automaticamente il codice di epilogo per azzerarlo ma non sono sicuro (su Windows è un po' diverso).
e allora il nostro linux non lo sa:
#include <stdio.h>
void main()
{
}
compilo ...
$: gcc prova.c
prova.c: In function `main':
prova.c:4: warning: return type of `main' is not `int'
in effetti e' solo un warning ma a me piace compilare con
0 errori e 0 warnings ;)
Beh certo l'ansi C richiede int main e che venga restituito 0 alla fine, ma ormai pochi se lo ricordano :D
Credo comunque che il problema di revo sia un pessimo insegnante.
Questo C semplificato che si è inventato è ottimo per confondere le idee a quanto pare
trallallero
15-06-2006, 14:45
MA LOL :rotfl:
se ti fa ridere questa saresti morto dal ridere con quella che ho visto io a roma alla Wind.
Faceva piu' o meno cosi:
for ( xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx )
{
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
...
}
ovviamente le x al posto del codice che non conosco.
E il tipo che lo stava scrivendo si giutifico' dicendo:
e' l'unico modo per fare questa cosa prestante ....
:mbe: ...... ma va a cager (lo pensai e basta :D )
jappilas
15-06-2006, 14:55
for ( xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx )
{
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
...
}
ovviamente le x al posto del codice che non conosco.
E il tipo che lo stava scrivendo....
... era un genio :asd:
e quel codice una perla :D
trallallero
15-06-2006, 15:13
... era un genio :asd:
e quel codice una perla :D
:) e chissa' quando (spero) ha ripreso in mano il codice magari 2 mesi dopo ... :rotfl:
ecco la soluzione alla seconda traccia (siccome non hai specificato ho ipotizzato una sequenza di 10 numeri)
#include <stdio.h>
#include <stdlib.h>
using namespace std;//non so se ci vuole
int main ()
{
int seq[10]; // 1
int nc; // 2
int i; // 3
seq[9]= 0; // 4
printf("Inserisci il numero da cercare nella sequenza: ");// 5
scanf("%d",&nc);// 6
for (i=0; i < 9; i++)// 7
{ // 8
printf("Inserisci uno alla volta 9 numeri: ");// 9
scanf("%d",&seq[i]); // 10
} // 11
if(nc==seq[1]) // procedura complessa che spiego sotto
{
printf("%d",1);
}
else
if(nc==seq[2])
{
printf("%d",1);
}
else
if(nc==seq[3])
{
printf("%d",1);
}
else
if(nc==seq[4])
{
printf("%d",1);
}
else
if(nc==seq[5])
{
printf("%d",1);
}
else
if(nc==seq[6])
{
printf("%d",1);
}
else
if(nc==seq[7])
{
printf("%d",1);
}
else
if(nc==seq[8])
{
printf("%d",1);
}
else
if(nc==seq[9])
{
printf("%d",1);
}
else
{
printf("%d",0);
}
return 0;
}
ecco la legenda:
1 = dichiara una particolare variabile, chiamata array, che contiene tante variabili quante indicate in parentesi quadra (in questo caso 10). per accedere a queste variabili si scriverà (nome)[(numero)] (in questo caso seq[(numero)] ).
ricorda infine che la numerazione parte da 0, quindi un array lungo 10 variabili si estendera da [0] a [9].
2 = dichiara la variabile contenente il numero da cercare.
3 = dichiara la variabile che verrà usata nel ciclo for.
4 = imposta l'ultimo numero dell'array a 0 (siccome la traccia dice che l'ultimo numero deve essere 0)
5 = chiede all'utente di immettere il numero che verrà cercato.
6 = "cattura" il numero immesso e lo salva nella variabile indicata, in questo caso nc.
7 = fa partire il ciclo for. i numeri tra parentesi indicano: il valore iniziale della variabile che sara testata (i = 0), la condizione che deve essere verificata perche il ciclo continui (i < 9), gli effetti che avra sulla variabile ogni ciclo (i++, che significa "aggiungi 1 al valore di i e salva in i il risultato")
8 = dopo questa parentesi si trovano le istruzioni da eseguire nel ciclo for
9 = spiega all'utente cio che deve fare
10 = salva l'input dell'utente al "i"esimo posto nell'array. questo significa che ogni ciclo i varrà +1 e quindi in ogni ciclo verrà colmato un posto nell'array.
11 = chiude la parte di codice da eseguire nel ciclo for
procedura = questa procedura è un po complessa.
praticamente al programma viene detto :
SE nc è uguale al numero posto al primo posto dell'array ALLORA scrivi 1 (cioe il numero si trova nella sequenza) ALTRIMENTI, SE nc è uguale al numero posto al secondo posto dell'array ALLORA scrivi 1 (cioe il numero si trova nella sequenza ) eccetera eccetera. alla fine c'è sscritto (dopo il codice, quindi il numero non corrisponde a nessuno dei numeri dell'array) ALTRIMENTI scrivi 0 (il numero non e presente nella sequenza).
ora concludo in C... :D
SE hai capito ALLORA sono contento ALTRIMENTI :muro:
edit: siccome non sono un genio prego qualcuno che se ne intende di verificare se c'è qualche errore nel codice. grazie :)
comunque la traccia che hai dato (2°) puo avere diversi codici,
è meglio se posti specificazioni/appunti/altro che possa aiutare a capire come deve essere fatto il codice.
procedura = questa procedura è un po complessa.
praticamente al programma viene detto :
SE nc è uguale al numero posto al primo posto dell'array ALLORA scrivi 1 (cioe il numero si trova nella sequenza) ALTRIMENTI, SE nc è uguale al numero posto al secondo posto dell'array ALLORA scrivi 1 (cioe il numero si trova nella sequenza ) eccetera eccetera. alla fine c'è sscritto (dopo il codice, quindi il numero non corrisponde a nessuno dei numeri dell'array) ALTRIMENTI scrivi 0 (il numero non e presente nella sequenza).
for(i = 0; i < 10; i++)
if(nc==seq[i]) printf("%d", i);
:|
Il resto non l'ho letto ma la traccia dice una serie di numeri termianta da 0
ragazzi grazie a tutti
cmq si ....per noi si parla di pseudo codice , ecco il perchè di scanf (x) ed affini.
cmq, ho un altro quesito(nn mi uccidete please)
allora, se volessi dare un numero e calcolarne il doppio , posso agire cosi?
( )
( INIZIO )
|
|
[ leggi x ] scanf
|
|
assegnazione
| somma = x |
|
|
[somma + x ]
|
|
[restituisci somma]
@xalexalex
il codice è giusto, lho compilato e testato. cmq non ho capito cosa vuoi dire.
@revo
devi fare:
//tutti i file da includere...
int main()
{
int numero; //dichiara la variabile
printf("Inserisci un numero");//dice all'utente il da farsi
scanf("%d",numero); // conserva il numero nella variabile
numero = numero*2; // moltiplica il numero per 2
printf("%d",numero); // scrive il numero
}
ragazzi grazie a tutti
cmq si ....per noi si parla di pseudo codice , ecco il perchè di scanf (x) ed affini.
cmq, ho un altro quesito(nn mi uccidete please)
allora, se volessi dare un numero e calcolarne il doppio , posso agire cosi?
( )
( INIZIO )
|
|
[ leggi x ] scanf
|
|
assegnazione
| somma = x |
|
|
[somma + x ]
|
|
[restituisci somma]
Si va bene
restituisci somma devi usarlo nel caso la funzione non sia main, se la funzione è main ti conviene stampare il risultato,facendo printf("%d",somma);
cmq il codice non è esatto.
questo è il codice corretto:
( )
( INIZIO )
|
dichiarazione delle variabili (somma e x)
|
printf dice all'utente di immettere un numero
[ leggi x ] scanf
|
|
| somma = x |
|
|
[somma = somma + x OPPURE somma = somma*2]
|
|
printf(somma)
ehm.....quale fra i due è corretto?!
ho fatto il test e una traccia diceva di fare un diagramma di flusso per un programma che leggesse un numero e ne stampasse il doppio;
indi per cui ho pensato alla somma di se stesso.
quel somma + x l ho messo nel romboide, quindi è istruzione....perchè è sbagliato?
Ma non è che per C semplificato intendi una specie di Pascal like con le parole riservate del C? :D
no no
uno pseudocodice;
non freqeuntando una facoltà di informatica, o cmq di ingengeria inf etc etc , ho frequentato un corso di informatica 2 durante il quale vengono ilustrati i fondamenti e le basi del C secondo i diagrammi di flusso e cmq utilizzando uno pseudocodice.
tt qui ;)
sono corretti tutti e due, ma e inutile fare 1+1 quando puoi fare 1*2 :D
@xalexalex
il codice è giusto, lho compilato e testato. cmq non ho capito cosa vuoi dire.
non so chi sia xalexalex ma penso ti riferisca a me
Che funzioni non lo metto in dubbio, ma è pazzesco. Se fai 10 volte le stesse cose, un ciclo è quanto meno più naturale. Per questi esercizietti non cambia nulla, ma è meglio scrivere buon codice dalle basi
xalexalex è "Alessandro:Xalexalex"
cmq adesso aggiusto il codice, grazie :D
#include <stdio.h>
#include <stdlib.h>
using namespace std;//non so se ci vuole
int main ()
{
int seq[10];
int nc;
int i;
int ris = 0;
seq[9] = 0;
printf("Inserisci il numero da cercare nella sequenza: ");
scanf("%d",&nc);
for (i=0; i < 9; i++)
{
printf("Inserisci uno alla volta 9 numeri: ");
scanf("%d",&seq[i]);
}
for (i=0; i<9; i++)
{
if(nc==seq[i])
{
ris = 1;
}
}
printf("%d\n",ris);
system("PAUSE");
return 0;
}
using namespace std;//non so se ci vuoleNo, non serve ... non hai usato le librerie C++ come <string>, <iostream>, ecc...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.