Newsgroup: it.comp.lang.c
Titolo: [HELP] Esercizio sugli interi.

Ho il seguente esercizio assegnato ma non so come fare. Premetto che
ci ho provato inutilmente prima con un ciclo e poi con una condizione
ma non ho risulto nulla.
Qualcuno mi può aiutare? Grazie.
- Trovare il massimo di una sequenza di interi forniti dall'utente che
termina quando l'utente inserisce il valore 0.
Ah un altra cosa: c'è un problema che mi assilla; data una sequenza di
numeri stamparli in ordine crescente. Ci sono molte condizioni da fare
già con 3 numeri, se si usano 30 numeri come diavolo si fa? Credo
esista qualche formula. Esempi di aiuto? Grazie

 ha scritto nel messaggio
news:pv0dqv0j2rp45l0c9...@4ax.com...


 esista qualche formula. Esempi di aiuto? Grazie
Ti posto il codice già intendato commentato e testato
ma dubito che ti aiuterà ad imparare programmare
Ciao Max
#include <stdio.h>
#define NTOT 30
int main(void)
{
    int v[NTOT], n, i, k, app,minimo,posmin;
   // Acquisizione dati
    printf ("ORDINAMENTO\nQuanti numeri vuoi dare in input? : ");
    scanf ("%d", &n);
    if (n<=0 || n>NTOT ) printf ("ERRORE!!!");
    else {
        for (i=0; i<n; i++){
            printf ("Scrivi il %d numero: ", i+1);
            scanf ("%d", &v[i]);
        }
       // Ordinamento crescente per selezione del minimo
        for (i=0; i<n-1; i++){
               minimo=v[i];
               posmin=i;
               for (k=i+1; k<n; k++){
                      if (v[k]<minimo){
                              minimo=v[k];
                              posmin=k;
                     }
              }
             app=v[i];
             v[i]=v[posmin];
             v[posmin]=app;
     }
	// Stampa dati ordinati
        printf ("I numeri ordinati sono:\n");
        for (i=0; i<n; i++) printf ("%d\n", v[i]);
	}
getchar();
}
-- 
+-----------------------------------------------------------+
| Secondo alcuni autorevoli testi di tecnica Aeronautica,   |
| il calabrone non può volare, a causa della forma e del    |
| peso del proprio corpo in rapporto alla superficie alare. |
| Ma il calabrone non lo sa e perciò continua a volare.     |
|					     Igor Sikorsky  |
+-----------------------------------------------------------+

ma dubito che ti aiuterà ad imparare programmare
Dopo una seconda e attenta lettura ho capito.
Ti ringrazio.

 
Mmmm... scusami ma non sono molto convinto dalle tue spiegazioni e ti 
spiego perché, da studente quale sono. Se posti una questione del tipo: 
"non ho capito come funziona il ciclo for" o se, dopo aver scritto il 
codice, postandolo, dici che ti dà errori o allarmi è un conto, ma 
postare il testo dell'esercizio per avere una risposta diretta non ha 
alcun valore didattico perché se non sei riuscito a risolvere un 
esercizio banale con i cicli di certo non ne capirai appieno il 
funzionamento. E poi cosa sarebbero sti tools? Insomma, tutto quello che 
dovevi sapere per risolvere l'esercizio viene spiegato nelle prime due 
lezioni di informatica1 sul C (tipi di dato, main, input/output e 
funzioni correlate e controllori IF, FOR, ecc..)
Buona serata
Gian Leonardo

funzioni correlate e controllori IF, FOR, ecc..)
Premetto che ho dato delle spiegazioni solo come un favore. Avrei
potuto benissimo non dire nulla. Se qualcuno poi mi avesse dato una
mano o no erano problemi miei. Detto ciò sei libero di non credere.
Riprendendo il discorso, come detto prima il mio problema su questi
esercizi non è il capire o no un istruzione del C, piuttosto
comprendere l'esercizio e cercare di intuirlo prima di tutto nella
mente (chi non fa cosi? nessuno credo).
Posso dimostrartelo se vuoi: prima del famigerato esercizio ne ho
fatto un altro piu semplice che ha richiesto comunque l'uso del ciclo
FOR. Ora, se io non avessi capito il suo funzionamento non lo avrei
fatto. Non credi?
Ecco il mio codice come dimostrazione:
/* Dati due numeri int16bit calcola il quoziente e il resto della
divisione composta da più differnze */
// Esercizio 2
#include <stdio.h>
int main()
{
	int n1, n2;
	int cont=0, s=0, r=0;
	printf("\n Digitare un intero di 16 bit: ");
	scanf("%d",&n1);
	printf("\n Digitare un secondo intero di 16 bit: ");
	scanf("%d",&n2);
	for (cont=n1;cont>0;cont=cont-n2)
		{
			if (cont<n2)
				{
					r=cont;
				}else{
					s=s+1;
			                           s=s;
				}
		}
	printf("\n Il quoziente della divisione tra %d e %d e'
%d",n1,n2,s);
	printf("\n Il resto della divisione tra %d e %d e'
%d\n",n1,n2,r);
}
In passato ho fatto qualche programma a scopo personale, quale un
semplice algoritmo di cifratura (niente a che fare con chiavi
pubbliche ecc) ed era abbastanza più complesso di questi esercizi.
Ora, senza tirarla lunga, so che in questo newsgroup non sono visti di
buon occhio coloro che chiedono il codice già fatto, ed è
comprensibile, ma io non ho mai chiesto ciò; solo un aiuto per farmi
capire.  

 capire.  
Guarda xam, il mio era un consiglio. Poi sei libero di fare come vuoi; 
il consiglio che ti posso dare è di scegliere un testo ricco di esempi e 
soprattutto chiaro. Se ne parla spesso in questo ng e facendo una 
ricerca con google ne potrai avere un'ampia panoramica. Per quanto 
riguarda strettamente il programma ti consiglio di non buttare subito 
giù il codice ma di meditare sul come scomporre il problema in parti 
semplici. Anche se non si ha esperienza con i diagrammi di flusso la 
logica aiuta moltissimo anche se l'ottimizzazione di certe procedure 
avviene solo con l'esperienza.
Partendo dal tuo quesito principe, il problema si risolve molto 
agevolmente scansionando l'array degli elementi inseriti con un ciclo 
for all'interno del quale venga fatta una comparazione fra la variabile 
max e l'elemento corrente per num volte (determinate all'inserimento dei 
dati); se l'elemento corrente è maggiore di max allora esso divverrà max 
stesso, altrimenti non esegui nulla. Uscito dal for stampi a video il max.
Esempio in pratica tralasicando gli include, define di DIM e il main
int max, vettore[DIM], i;
max=vettore[0] // associ il primo valore del vettore alla variabile max
for (i=1; i<num; i++) { // inizi lo scansionamento degli el. del vettore
  if (vettore[i]>max) // se l'elemento considerato è > allora
    max=vettore[i];}  // diventa lui il max altrimenti non accade nulla
printf ("Il massimo valore immesso è %d", max); // stampi a video max
Per l'altro quesito la risposta di Max è ottima.
ciao
Gian Leonardo

 max=vettore[0];
                 ^
Avevo dimenticato il ;
Chiaramente devi prima riempire il vettore ;-)
ciao
Gian Leonardo

Gian Leonardo
Ciao

 Chiaramente devi prima riempire il vettore ;-)
Il confronto non può essere fatto durante la lettura dei numeri, senza usare
il vettore?
(scritto con una sottospecie di schifezza di metalinguaggio :)
{
$Massimo = minore numero rappresentabile col tipo di variabile scelto;
Leggi un numero da tastiera
fin quando il numero è diverso da 0
{
   Se il numero è > di Massimo allora sostituisci Massimo con questo numero
    Leggi un numero da tastiera
}
Stampa Massimo
}
Feci una cosa del genere al III superiore ;))
Ciao
Dav

 
Assolutamente sì, ma se hai capito il principio dell'assegnamento a una 
variabile temporanea e la scansione del vettore inserire una printf e 
uns scanf è un gioco semplice ;-)
Forse però a questo punto basterebbe un ciclo do while che acquisisca il 
numero e... vabbé, faccio prima a scriverlo :-D
//acquisiszione del primo valore
printf ("Inserire il valore\n");
scanf ("%d", &max);
// Inizi a definire le istruzioni da compiere per acuisire il numero
// e capire se è il max o meno
do {
  printf ("Inserire il valore\n");
  scanf ("%d", &temp);
  if (temp>max)
   max=temp;
  } while (temp!=0)
printf ("Il massimo dei valori inseriti e': %d", max);
Unico svantaggio di questo sistema è che non ti rimane da nessuna parte 
la sequenza dei valori immessi.
ciao
Gian Leonardo

 la sequenza dei valori immessi.
Il mio prof si incazzava a morte se i programmi che scrivevamo facevano + di
quanto chiesto!! "DEVI SOLO TROVARE IL MASSIMO TRA GLI INSERITI! HO FORSE
DETTO DI MEMORIZZARLI DA QUALCHE PARTE?? LEGGI LA TRACCIA!!! ALLE SUPERIORI
VI HANNO ROVINATO!!!! DIMENTICATEVI QUELLO CHE VI HANNO SPIEGATO!!!
AAARRGGHHHH", ecco come avrebbe risposto lui...
Ciao a tutti,
Dav

 
Certo che non è di ampie vedute. E' vero che negli esercizi ci si limita 
al poco necessario, ma dimostrare di saper gestire un array sicuramente 
è buona cosa, almeno IMHO. Anche perché quello che fai in più è a tuo 
rischio e pericolo, quindi spesso si dà l'indicazione di non strafare.
L'unica cosa che non ho capito è se questo professore lo hai incontrato 
alle superiori o in università?
ciao
Gian Leonardo

 alle superiori o in università?
Università, Proff. Carlo Tesauro & Giovanni Criscuolo, Programmazione I
Modulo A (I anno I semestre)
Ciao ciao
Dav