Torna indietro   Hardware Upgrade Forum > Software > Programmazione

WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro
Con Midnight, Blizzard tenta il colpaccio: il player housing sbarca finalmente su Azeroth insieme a una Quel'Thalas ricostruita da zero. Tra il dramma della famiglia Ventolesto e il nuovo Prey System, ecco com'è la nuova espansione di World of Warcraft
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Nuova frontiera per i robot tagliaerba, con Ecovacs GOAT O1200 LiDAR Pro che riconosce l'ambiente in maniera perfetta, grazie a due sensori LiDAR, e dopo la falciatura può anche rifinire il bordo con il tagliabordi a filo integrato
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Equilibrio e potenza definiscono il Samsung Galaxy S26+, un flagship che sfida la variante Ultra e la fascia alta del mercato con il primo processore mobile a 2nm. Pur mantenendo l'hardware fotografico precedente, lo smartphone brilla per un display QHD+ da 6,7 pollici d'eccellenza, privo però del trattamento antiriflesso dell'Ultra, e per prestazioni molto elevate. Completano il quadro la ricarica wireless a 20W e, soprattutto, un supporto software settennale
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 06-06-2007, 12:44   #1
enrico999
Member
 
L'Avatar di enrico999
 
Iscritto dal: Jan 2004
Città: Verolavecchia
Messaggi: 198
[C] Risoluzione esercizio semplice...

semplice per voi...

Data la traccia sotto riportata completare il codice in modo di aumentare di 1 tutti gli interi pari e diminuire di 1 tutti quelli dispari nell'array vettore[] di dimensione dim. Riportare come risultato il numero che comparira' a monitor. Per esempio un vettore che contiene gli elementi {4,56,3,78,23} dopo essere stato aggiornato deve contenere gli elementi {5,57,2,79,22} .

Codice:
#include <stdio.h>
#include <stdlib.h>


float CalcolaRisultato(int vettore[], int dim);

int main()
{

 int vettore[]= {6,5,4,3,3,1,14,67,89,105,24,56,78, 9,
 6,5,4,3,2,1,14,67,89,100,24,56,78,9,6,5,4,
 3,2,11,14,67,89,100,24,56,78, 9,
 6,5,4,3,2,1,14,67,89,100,24,56,78,9,6,5,4,3,2,1,14,
 67,89,100,24,46,78, 9,
 2,1,14,67,89,100,24,56,78, 9,
 6,5,4,37,2,1,14,67,89,100,24,56,78,
 9,6,5,4,5,2,1,14,67,89,100,24,56,78, 9,
 6,5,4,3,2,1,14,67,89,100,24,56,78,9,6,5,4,3,2,1,14,67,89,102,24,56,78, 9,
 6,5,4,3,2,1,14,67,89,67,89,100,24,5,79,9,6,5,4,3,2,1,
 104,24,56,78,9,6,5,4,3,2,1,14,67,89,100,24,56,78, 9,
 6,5,4,3,2,1,14,68,89,100,24,56,79,9,6,5,4,3,2,1,14,67,89,100,24,56,78, 9,
 6,5,4,3,12,1,14,67,89,100,24,56,78,9,6,5,4,3,
 6,5,4,3,5,1,14,67,89,100,24,56,
 6,5,4,3,2,1,14,67,89,100,24,56,78,9,6,5,4,3,112,1,14,67,89,100,124,56,78, 9,
 6,5,4,3,2,1,14,67,89,100,24,56,78,9,6,
 5,4,3,2,1,14,67,89,100,24,56,78, 9,
 6,5,4,3,2,14,14,67,89,100,24,56,78,9,6,5,4,3,2,21,14,67,89,100,24,56,78, 9,
 14,67,89,100,24,56,78, 9,6,5,4,3,2,1,14,
 6,5,4,3,2,1,14,67,89,190,24,56,78,9,6,5,4,3,2,1,14,67,89,100,24,56,78, 9,
 78,9,6,5,4,3,2,1,14,67,89,104,24,56,78, 9,
 6,5,4,3,2,1,14,67,89,100,24,56,78,9,6,5,4,3,2,1,14,67,89,100,24,56,78, 9,
 6,5,5,3,2,1,14,67,89,100,24,56,78,9,6,5,4,3,21,1,
 14,67,89,100,24,56,78, 9,
 6,5,4,3,2,1,14,67,99,100,24,56,78,9,6,5,4,0,2,1,14,67,89,110,24,56,78, 9
 };
 
 int dim =462;    // il vettore contiene dim elementi !
 float risultato;

 
  
 // ----- inizio dell'esercizio -------

 // Scrivi il codice che incrementa tutti gli interi pari e decrementa tutti quelli dispari 
 // nell'array vettore[]
 // N.B. la soluzione corretta deve stare dentro l'array vettore[] 


 // ----- fine dell'esercizio -------


 // NON TOCCARE TUTTE LE RIGHE QUI SOTTO
 risultato = CalcolaRisultato(vettore, dim);
 printf("\nrisultato da copiare ed incollare = %d \n\n" , (int) risultato );
 getchar();
 exit(0);
}  // main

float CalcolaRisultato(int vettore[], int dim)
{
   int i;
   float divisore, dividendo=0;
   for(i=0;i < dim; i++)
   {
      dividendo += i * vettore[i];
   }
   divisore = (dim +1)*dim/2; 
   return 100*dividendo/divisore; 
   
}
enrico999 è offline   Rispondi citando il messaggio o parte di esso
Old 06-06-2007, 13:03   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da enrico999 Guarda i messaggi
Data la traccia sotto riportata completare il codice in modo di aumentare di 1 tutti gli interi pari e diminuire di 1 tutti quelli dispari nell'array vettore[] di dimensione dim.
Fai un ciclo for in cui per ogni valore del vettore calcoli il resto della divisione per 2 (n%2), se il resto è 0 allora è pari, altrimenti è dispari. A quel punto incrementi o decrementi il valore.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 06-06-2007, 14:06   #3
enrico999
Member
 
L'Avatar di enrico999
 
Iscritto dal: Jan 2004
Città: Verolavecchia
Messaggi: 198
come faccio a fare un ciclo for per ogni valore del vettore?
enrico999 è offline   Rispondi citando il messaggio o parte di esso
Old 06-06-2007, 14:10   #4
yorkeiser
Senior Member
 
L'Avatar di yorkeiser
 
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
Uh? NON devi fare un ciclo per ogni valore, te ne basta uno solo in cui scorri tutto il vettore

Codice:
for (int i=0;i<max; i++)
{ 
    vettore[i]= ...
}
__________________
Il sole è giallo
yorkeiser è offline   Rispondi citando il messaggio o parte di esso
Old 06-06-2007, 15:22   #5
enrico999
Member
 
L'Avatar di enrico999
 
Iscritto dal: Jan 2004
Città: Verolavecchia
Messaggi: 198
quindi devo fare:

Codice:
for (int i=0;i<462; i++)
{ 
    vettore[i]=462
}
mmmmm mi sa che ho sbagliato....
enrico999 è offline   Rispondi citando il messaggio o parte di esso
Old 06-06-2007, 15:27   #6
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da enrico999 Guarda i messaggi
Codice:
for (int i=0;i<462; i++)
{ 
    vettore[i]=462
}
mmmmm mi sa che ho sbagliato....
La variabile 'dim' ce l'hai, quindi non vedo perché devi usare una costante.
Comunque dentro questo ciclo for devi semplicemente calcolare il resto della divisione tra un valore e 2. Questo lo ottieni con l'operatore %. Stabilito se è pari o dispari, incrementi o decrementi il valore.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 06-06-2007, 15:53   #7
enrico999
Member
 
L'Avatar di enrico999
 
Iscritto dal: Jan 2004
Città: Verolavecchia
Messaggi: 198
potresti postarmi il codice giusto, proprio non mi ci trovo...
enrico999 è offline   Rispondi citando il messaggio o parte di esso
Old 06-06-2007, 18:43   #8
uomoserio
Senior Member
 
L'Avatar di uomoserio
 
Iscritto dal: Aug 2000
Messaggi: 608
Quote:
Originariamente inviato da enrico999 Guarda i messaggi
potresti postarmi il codice giusto, proprio non mi ci trovo...
Codice:
for (int i=0; i<dim; i++)
{
   if (vettore[i]%2 == 0) vettore[i]=vettore[i]+1
   else vettore[i]=vettore[i]-1
}
Ovviamente l'incremento e il decremento del valore del vettore li ho scritti per esteso solo per farti capire meglio.
Fossi in te, però, per imparare meglio eviterei di farmi dare il codice "pronto"

Scusate l'intrusione
__________________
Intel Core2Quad Q6600 2,4GHz @ 3,0 GHz
2 Gb RAM 667 MHz
ATI HD2900XT
uomoserio è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2007, 09:49   #9
enrico999
Member
 
L'Avatar di enrico999
 
Iscritto dal: Jan 2004
Città: Verolavecchia
Messaggi: 198
mi da errore già alla prima riga:

for (int i=0; i<dim; i++)

e mi dice:

'for' loop initial declaration used outside C99 mode
enrico999 è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2007, 10:15   #10
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da enrico999 Guarda i messaggi
mi da errore già alla prima riga:

for (int i=0; i<dim; i++)

e mi dice:

'for' loop initial declaration used outside C99 mode
Se stai compilando in modalità "ANSI C" non si possono fare dichiarazioni di variabili nel for (lo si può fare appunto nel C99 o in C++).

Semplicemente dichiara 'i' da qualche altra parte, dove hai dichiarato 'dim' ad esempio.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2007, 10:23   #11
enrico999
Member
 
L'Avatar di enrico999
 
Iscritto dal: Jan 2004
Città: Verolavecchia
Messaggi: 198
allora, ho fatto:

Codice:
int i;
for ( i=0; i<dim; i++)
{
   if (vettore[i]%2 == 0) vettore[i]=vettore[i]+1
   else vettore[i]=vettore[i]-1
}
però mi da errore nell'ultima riga, mi dice:

parse error before "else"
enrico999 è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2007, 10:45   #12
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da enrico999 Guarda i messaggi
parse error before "else"
Metti il ';' dopo le due assegnazioni.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2007, 10:54   #13
enrico999
Member
 
L'Avatar di enrico999
 
Iscritto dal: Jan 2004
Città: Verolavecchia
Messaggi: 198
GRAZIE GRAZIE!


Lo so che secondo voi capire come si fa un esercizio partendo dalla soluzione non va bene... ma ognuno ha i suoi metodi...

CIAO e GRAZIE ANCORA!


Avrei anche un altro esercizio... che dite, lo posto?
enrico999 è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2007, 10:56   #14
enrico999
Member
 
L'Avatar di enrico999
 
Iscritto dal: Jan 2004
Città: Verolavecchia
Messaggi: 198
Ma si dai, io lo posto, se qualcuno ha voglia di aiutarmi...

L'esercizio è questo:

* salva il testo sotto riportato nel file telefonate.txt ;
* scrivi il programma Contatelefonate.c che accede al file telefonate.txt e calcola il numero di telefonate effettuate a un cellulare e il numero di quelle effettuate verso un numero fisso;
* calcola come risultato il maggiore tra questi due numeri.

Per stabilire se il telefono e' un cellulare o un fisso si consiglia di utilizzale la funzione strcmp(s1,s2) che restituisce 0 se le due stringhe sono uguali, un numero negativo se s1 e' minore di s2 in ordine lessicografico e un numero positivo altrimenti. Nota bene: il file telefonate.txt e' composto da stringa tabulatore numeroconvirgola tabulatore stringa tabulatore stringa FINERIGA

---- testo da incollare nel file telefonate.txt -----
0234023402 02.23 milano 3minuti
02334023402 12.22 milano 4minuti
333402340 0.23 cellul 4minuti
0554023402 02.23 firenze 3minuti
06334023402 12.22 roma 4minuti
333402340 0.23 cellul 4minuti
0234023402 02.23 milano 3minuti
024334023402 12.12 milano 4minuti
333402340 0.23 cellul 4minuti
02354023402 02.23 milano 3minuti
06334023402 12.22 roma 4minuti
3337402340 0.23 cellul 4minuti
0234023402 02.73 milano 3minuti
06334023402 12.22 roma 4minuti
0554023403 02.23 firenze 3minuti
3833402340 0.23 cellul 4minuti
0234023402 02.23 milano 3minuti
02334023402 12.22 milano 4minuti
3333402340 0.23 cellul 4minuti
0234023402 02.23 milano 3minut
0554023403 02.23 firenze 3minuti
02334023402 12.22 milano 4minuti
3363402340 0.23 cellul 4minuti
0234023402 02.23 milano 3minuti
02334023402 12.22 milano 4minuti
333402340 0.23 cellul 4minuti
02534023402 02.23 milano 3minuti
02334023402 12.22 milano 4minuti
333402340 0.23 cellul 4minuti
02334023402 12.22 milano 4minuti
333402340 0.23 cellul 4minuti
0554023402 02.23 firenze 3minuti
06334023402 12.22 roma 4minuti
333402340 0.23 cellul 4minuti
0234023402 02.23 milano 3minuti
024334023402 12.12 milano 4minuti
333402340 0.23 cellul 4minuti
333402340 0.23 cellul 4minuti
333402340 0.23 cellul 4minuti
0234023402 02.23 milano 3minuti
023344023402 12.22 milano 4minuti
333402340 0.43 cellul 4minuti
0234023402 02.23 milano 3minuti
055334023402 12.22 firenze 4minuti
34333402340 0.23 cellul 4minuti
0234023402 02.23 milano 3minuti
02334023402 12.22 milano 4minuti
333402340 0.23 cellul 4minuti
02324023402 02.23 milano 3minuti
05533402340 12.22 firenze 4minuti
3333402340 0.23 cellul 4minuti
06364023402 02.23 roma 3minuti
02334023402 12.22 milano 4minuti
333402340 0.23 cellul 4minuti
0234023402 02.23 milano 3minuti
02334023402 12.22 milano 4minuti
333402340 0.23 cellul 4minuti
02324023402 02.23 milano 3minuti
02334023402 12.22 milano 4minuti
333402340 0.23 cellul 4minuti
3337402340 0.23 cellul 4minuti
0234023402 02.73 milano 3minuti
02334023402 12.22 milano 4minuti
05533402340 12.22 firenze 4minuti
3833402340 0.23 cellul 4minuti
0634023402 02.23 roma 3minuti
02334023402 12.22 milano 4minuti
---------------------

CIAO
enrico999 è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2007, 11:11   #15
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da enrico999 Guarda i messaggi
* salva il testo sotto riportato nel file telefonate.txt ;
* scrivi il programma Contatelefonate.c che accede al file telefonate.txt e calcola il numero di telefonate effettuate a un cellulare e il numero di quelle effettuate verso un numero fisso;
* calcola come risultato il maggiore tra questi due numeri.
Bene:

- apri il file in lettura con fopen()
- fai un ciclo in cui leggi una singola riga per volta con fgets()
- controlli/conteggi quello che ti interessa
- Una volta terminato il ciclo chiudi il file con fclose()

Questo in sintesi è il da farsi.

Quello che non ho capito è se devi avere un totale di tutte le telefonate a fissi e cellulari (in questo caso sarebbe semplice, se inizia con '0' non è un cellulare). Oppure se devi conteggiare le telefonate per ogni singolo numero (più complicato). Ma credo sia il primo caso.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2007, 12:31   #16
enrico999
Member
 
L'Avatar di enrico999
 
Iscritto dal: Jan 2004
Città: Verolavecchia
Messaggi: 198
il primo pezzo ho fatto così:

Codice:
#include <stdio.h>
#include <stdlib.h>



int main()


FILE *fopen(telefonate.txt, r);
va bene?

come faccio adesso a fare un ciclo per leggere una sola riga per volta con fgets()???
enrico999 è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2007, 12:38   #17
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da enrico999 Guarda i messaggi
Codice:
#include <stdio.h>
#include <stdlib.h>



int main()


FILE *fopen(telefonate.txt, r);
va bene?
No.
Codice:
#include <stdio.h>

int main (void)
{
    FILE *f;

    f = fopen ("telefonate.txt", "r");

    if (f != NULL)
    {
        /* ... il resto ... */
    }

    return 0;
}
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2007, 13:12   #18
enrico999
Member
 
L'Avatar di enrico999
 
Iscritto dal: Jan 2004
Città: Verolavecchia
Messaggi: 198
bene..

ma per leggere una riga per volta?

io ho provato a fare così, ma ho canato...

Codice:
while(1) {
    res=fgets(buf, 200, fd);
    if( res==NULL )
      break;
    printf("%s", buf);
   }
enrico999 è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2007, 13:30   #19
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da enrico999 Guarda i messaggi
Codice:
while(1) {
    res=fgets(buf, 200, fd);
    if( res==NULL )
      break;
    printf("%s", buf);
   }
Tecnicamente mi sembra corretto.

Io in genere sono solito fare:
while (fgets (buf, sizeof (buf), f) != NULL) { ..... }
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2007, 13:33   #20
enrico999
Member
 
L'Avatar di enrico999
 
Iscritto dal: Jan 2004
Città: Verolavecchia
Messaggi: 198
anche a me sembra corretto, ma mi da errore in questa riga:

res=fgets(buf, 200, fd);

mi da questo errore:

`res' undeclared (first use in this function)


potresti magari postare il codice come sei solito fare tu?
enrico999 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro WoW: Midnight, Blizzard mette il primo, storico ...
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato Ecovacs Goat O1200 LiDAR Pro: la prova del robot...
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere? Recensione Samsung Galaxy S26+: sfida l'Ultra, m...
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti Zeekr X e 7X provate: prezzi, autonomia fino a 6...
Marathon: arriva il Fortnite hardcore Marathon: arriva il Fortnite hardcore
Le fotografie dell'eclissi solare e dell...
Oracle AI Database si potenzia con nuove...
Russia offline: blackout internet mobile...
Gemini, Google investe 30 milioni per la...
Roborock Qrevo Edge S5A: 17.000 Pa, acqu...
Resa pubblica la foto della ''Terra che ...
Il robot che ha piegato 200 scatole di f...
SteelSeries Aerox 3 Wireless Gen 2: nuov...
"Quasi sociopatico": Sam Altma...
Star Wars Eclipse in difficoltà: ...
Gestione del team e romance organiche: l...
Intel lancia Core Ultra X9 378H: hardwar...
Tomodachi Life non supporterà Handheld M...
Identificati i boss di REvil e GandCrab:...
Google Chrome 148 introduce il caricamen...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 17:47.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v