Torna indietro   Hardware Upgrade Forum > Software > Programmazione

PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è
La PNY GeForce RTX 5080 Slim OC si distingue nel panorama delle GPU di fascia alta per il design compatto a due slot, ispirato alla NVIDIA GeForce RTX 5080 Founders Edition. In questo test analizziamo comportamento termico e prestazioni in gioco, valutando se il formato ridotto comprometta o meno l'esperienza complessiva rispetto alle soluzioni più ingombranti presenti sul mercato.
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei
HUAWEI WiFi Mesh X3 Pro Suite è probabilmente il router mesh più fotogenico che si possa acquistare oggi in Italia, ma dietro il guscio in acrilico trasparente e le luci LED dinamiche c'è una macchina tecnica costruita attorno allo standard Wi-Fi 7, con velocità teoriche Dual-Band fino a 3,6 Gbps e una copertura fino a 120 m² una volta abbinato il router principale all'extender incluso nel kit
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte
Abbiamo provato le nuove CPU Intel Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: più core e ottimizzazioni al funzionamento interno migliorano le prestazioni, anche in virtù di prezzi annunciati interessanti. A questo si aggiungono nuove ottimizzazioni software. Purtroppo, a fronte di prestazioni di calcolo elevate, il quadro rimane incerto nel gaming, dove l'andamento rimane altalenante. Infine, rimane il problema della piattaforma a fine vita.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 08-05-2008, 11:50   #1
Sick Boy
Senior Member
 
L'Avatar di Sick Boy
 
Iscritto dal: Dec 2006
Città: Brescia
Messaggi: 497
[C] Domande da principiante

ciao,
mi sto addentrando nel mondo del C per un esame, ma ho molti problemi nel cominciare. Per questo ho aperto questo thread, in modo da postare qui tutte le domande che mi verranno nel corso dello studio (anche quelle di altri sono bevenute ovviamente!).

Per prima cosa: un esercizio mi chiede di creare un programma per il conteggio dei caratteri di tabulazione, di newline e di spazio in un testo in ingresso.

ho pensato a una cosa del genere:

Codice:
#include <stdio.h>

int main()
{
  int c;
  int ns, nt, nl;
  
  ns = 0;
  nt = 0;
  nl = 0;

  while((c = getchar()) != EOF)
    {
    if(c == '\n')
      ++nl;
    else if(c == '\t')
      ++nt;
    else if(c == ' ')
      ++ns;
    }
  printf("Spazi: %d\n", ns);
  printf("Tabulazioni: %d\n", nt);
  printf("Righe: %d\n", nl);
}
ma il programma non funziona correttamente. dove ho sbagliato?

grazie
Sick Boy è offline   Rispondi citando il messaggio o parte di esso
Old 08-05-2008, 15:25   #2
Sick Boy
Senior Member
 
L'Avatar di Sick Boy
 
Iscritto dal: Dec 2006
Città: Brescia
Messaggi: 497
perfetto! ora funziona! grazie!

in una versione precedente usavo EOF e fino a un certo punto mi dava risultati corretti (chiudevo il programmacon control+C)
Sick Boy è offline   Rispondi citando il messaggio o parte di esso
Old 08-05-2008, 18:59   #3
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Dichiara la variabile c come char, e non come int.

Comunque l'EOF lo puoi dare facilmente anche via tastiera, su Linux con Control+D, su Windows con Control+Z.
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 08-05-2008, 19:05   #4
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Whoops è vero!
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 14-05-2008, 15:41   #5
Sick Boy
Senior Member
 
L'Avatar di Sick Boy
 
Iscritto dal: Dec 2006
Città: Brescia
Messaggi: 497
ciao!

sono alle prese con un altro programma: devo calcolare la lunghezza delle parole inserite in input (da linea di comando) e poi crearne un istogramma in base alla loro lunghezza.

in parole povere: l'output del programma dovrebbe essere per esempio:

Codice:
parole con 0 lettere: 
parole con 1 lettere: X
parole con 2 lettere: XXX
parole con 3 lettere: XXXXXX
...
per ora ho evitato di stampare già le X per l'istogramma, ma ho comunque molti problemi.
questo è quello che ho provato a fare fin'ora:

Codice:
#include <stdio.h>
#define MAX 20

int main()
{
  int lung, c, i, fin, n;
  int parole[MAX], ndigit[MAX];

  for(i = 0; i < MAX; ++i)
    ndigit[i] = 0;

  lung = i = 0;

  while((c = getchar()) != EOF)
    {
    if((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'))
      ++lung;
    else if(c == ' ')
      {
      parole[i] = lung;
      lung == 0;
      ++i;
      }
    fin = i;
    }

  for(i = 0; i <= fin; ++i)
  {
    n = parole[i];
    ++ndigit[n];
    fin = i;
  }
  
  for(i = 0; i <= MAX; ++i)
    printf("Parole con %d lettere: %d", i, ndigit[i]);
}
dunque:

- l'uso di MAX deriva dal fatto che non mi ha permesso di definire un array di interi vuoto (e già qui è un problema, che ho pensato di risolvere usando l'intero "fin" che sarebbe l'indice finale dell'array riempito, ma su cui ho MOLTI dubbi)
- il funzionamento del ciclo while mi sembra corretto perchè controlla se il carattere in ingresso è una lettera (ho usato la tabella ASCII per fare il controllo del if), incrementa la variabile "lung", mentre se è uno spazio il valore della lunghezza della parola viene inserità nell'array "parole", "lung" viene riportata a 0 per il prossimo calcolo e l'indice dell'array viene incrementato. infine ho pensato di assegnare alla variabile "fin" il valore di "i" così da avere il valore totale degli indici dell'array.
- l'ultima parte è piena di dubbi: ho usato un secondo array "ndigit", per calcolare le varie occorrenze di lunghezze di parole (es: se ci fossero due parole di 3 lettere, allora all'indice 3 di ndigit avremo il valore 2), ma nonostante questo ho dei problemi.

dove ho sbagliato?
grazie!
Sick Boy è offline   Rispondi citando il messaggio o parte di esso
Old 14-05-2008, 15:54   #6
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
No, un'array vuoto non avrebbe senso, e la larghezza variabile la puoi ottenere usando dei puntatori. Comunque, se la lunghezza massima è 20, puoi definire un'array di 20 interi inizializzati a zero, leggere la lunghezza di ogni singola parola, ed incrementare l'intero presente nell'indice (lunghezza-1) dell'array - la lunghezza è l'unico dato che ti interessi realmente, o mi sbaglio?

Una cosa tipo:
Codice:
int nWordLength[N_MAX] = {0};
int nLength = 0;
char cInput = 0;

while ((cInput = getchar()) != EOF) {
  if (isalpha(cInput)) {
    nLength++;
    continue;
  }
  else if (cInput == ' ') {
    ++nWordLength[nLength-1];
    nLength = 0;
  }
}

StampaIstogramma();
(è solo un esempio, non prenderlo come vero "codice")

Comunque prova ad usare isalpha() invece che tutti quei controlli sul carattere, è una macro standard e dovrebbe funzionare.
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!

Ultima modifica di DanieleC88 : 14-05-2008 alle 16:01.
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 14-05-2008, 18:45   #7
Sick Boy
Senior Member
 
L'Avatar di Sick Boy
 
Iscritto dal: Dec 2006
Città: Brescia
Messaggi: 497
Quote:
Originariamente inviato da DanieleC88 Guarda i messaggi
No, un'array vuoto non avrebbe senso, e la larghezza variabile la puoi ottenere usando dei puntatori. Comunque, se la lunghezza massima è 20, puoi definire un'array di 20 interi inizializzati a zero, leggere la lunghezza di ogni singola parola, ed incrementare l'intero presente nell'indice (lunghezza-1) dell'array - la lunghezza è l'unico dato che ti interessi realmente, o mi sbaglio?

Una cosa tipo:
Codice:
int nWordLength[N_MAX] = {0};
int nLength = 0;
char cInput = 0;

while ((cInput = getchar()) != EOF) {
  if (isalpha(cInput)) {
    nLength++;
    continue;
  }
  else if (cInput == ' ') {
    ++nWordLength[nLength-1];
    nLength = 0;
  }
}

StampaIstogramma();
(è solo un esempio, non prenderlo come vero "codice")

Comunque prova ad usare isalpha() invece che tutti quei controlli sul carattere, è una macro standard e dovrebbe funzionare.
si, mi interessa solo la lunghezza delle parole e quante volte parole di una certa lunghezza si ripresentano.
con isalpha si alleggerisce molto il codice, però bene o male era come avevo fatto io, mentre il mio problema è più nel aumentare un "counter" per le parole di lunghezza uguale e poi stamparlo a video!
Sick Boy è offline   Rispondi citando il messaggio o parte di esso
Old 14-05-2008, 18:55   #8
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Vabbe', lo scheletro è quello, ma era per farti vedere una specie di pseudocodice che potevi usare solo una array e un contatore per fare tutto, riduce un po' il lavoro che devi fare e migliora la leggibilità. Per il resto credo andasse bene.
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 15-05-2008, 10:00   #9
dreadknight
Member
 
L'Avatar di dreadknight
 
Iscritto dal: Aug 2007
Messaggi: 50
Quote:
Originariamente inviato da Sick Boy Guarda i messaggi
ciao!

sono alle prese con un altro programma: devo calcolare la lunghezza delle parole inserite in input (da linea di comando) e poi crearne un istogramma in base alla loro lunghezza.

in parole povere: l'output del programma dovrebbe essere per esempio:

Codice:
parole con 0 lettere: 
parole con 1 lettere: X
parole con 2 lettere: XXX
parole con 3 lettere: XXXXXX
...
per ora ho evitato di stampare già le X per l'istogramma, ma ho comunque molti problemi.
prova ad usare la funzione strlen, che restituisce la lunghezza di una stringa. Però ricordati di includere la libreria string.h
dreadknight è offline   Rispondi citando il messaggio o parte di esso
Old 15-05-2008, 11:32   #10
Sick Boy
Senior Member
 
L'Avatar di Sick Boy
 
Iscritto dal: Dec 2006
Città: Brescia
Messaggi: 497
ho provato a fare come dicevi tu daniele e va già meglio!
però non mi funziona per ogni input! ad esempio per parole di 9 lettere non mi funziona!

riposto il codice modificato:

Codice:
#include <stdio.h>
#define MAX 20

int main()
{
  int lung, c, i;
  int parole[MAX] = {0};

  lung = i = 0;

  while((c = getchar()) != EOF)
    {
    if(isalpha(c))
      {
      ++lung;
      continue;
      }
    else if(c == ' ')
      {
      ++parole[lung];
      lung = 0;
      }
    }

  for(i = 0; i <= MAX; ++i)
    printf("Parole con %d lettere: %d\n", i, parole[i]);
}
Sick Boy è offline   Rispondi citando il messaggio o parte di esso
Old 15-05-2008, 11:35   #11
dreadknight
Member
 
L'Avatar di dreadknight
 
Iscritto dal: Aug 2007
Messaggi: 50
la variabile c e l'array li devi dichiarare come char, visto che stai inserendo dei caratteri e non dei numeri
dreadknight è offline   Rispondi citando il messaggio o parte di esso
Old 15-05-2008, 12:19   #12
Sick Boy
Senior Member
 
L'Avatar di Sick Boy
 
Iscritto dal: Dec 2006
Città: Brescia
Messaggi: 497
Quote:
Originariamente inviato da dreadknight Guarda i messaggi
la variabile c e l'array li devi dichiarare come char, visto che stai inserendo dei caratteri e non dei numeri
con getchar() si usano gli interi, mentre nell'array non inserisco nessun carattere, ma solo l'intero che corrisponde alla lunghezza delle parole della stringa in ingresso!
Sick Boy è offline   Rispondi citando il messaggio o parte di esso
Old 15-05-2008, 13:53   #13
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Da me veramente pare funzionare... fai una cosa però, non controllare solo (c == ' '), anche quella sostituiscila con isspace(c), che controlla anche altre punteggiature e altri separatori, fai prima.

Comunque:
  • per usare le macro isalpha() e isspace() devi include ctype.h
  • la funzione main() deve restituire un intero: dai un return 0; alla fine
  • non controllare (i <= MAX) nell'ultimo for, o avrai 21 iterazioni che leggeranno un elemento fuori dal vettore: controlla solo (i < MAX)

ciao
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 20-05-2008, 12:08   #14
Sick Boy
Senior Member
 
L'Avatar di Sick Boy
 
Iscritto dal: Dec 2006
Città: Brescia
Messaggi: 497
qui c'è la versione finale!
in fase di stampa ho modificato in modo che stampi una X a ogni occorrenza di una parola di una certa lunghezza, mentre non stampi nulla se non ci sono occorrenze di parole di una certa lunghezza.
ci può essere qualche ottimizzazione secondo voi?
sapete se c'è qualche funzione standard di C per calcolare le prestazioni (tempo e memoria) di un programma?

Codice:
#include <stdio.h>
#include <ctype.h>
#define MAX 20

int main()
{
  int lung, c, i, n;
  int parole[MAX] = {0};

  lung = i = 0;

  while((c = getchar()) != EOF)
    {
    if(isalpha(c))
      {
      ++lung;
      continue;
      }
    else if(isspace(c))
      {
      ++parole[lung];
      lung = 0;
      }
    }

  for(i = 0; i < MAX; ++i)
    {
    if(parole[i] == 0)
    {
      continue;
    }
    else if(parole[i] != 0)
      {
      printf("Parole con %d lettere: ", i);
      for(n = 1; n <= parole[i]; ++n)
        printf("X");
      }
      printf("\n");
    }
  return 0;
}
Sick Boy è offline   Rispondi citando il messaggio o parte di esso
Old 20-05-2008, 12:14   #15
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Quote:
Originariamente inviato da Sick Boy Guarda i messaggi
sapete se c'è qualche funzione standard di C per calcolare le prestazioni (tempo e memoria) di un programma?
Se usi un sistema Unix puoi lanciare il programma usando:
Codice:
time ./<programma>
E vedrai il tempo impiegato.

Altrimenti, se vuoi farlo da codice, ci sono vari modi. Puoi usare clock(), ad esempio.
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 22-05-2008, 15:13   #16
Sick Boy
Senior Member
 
L'Avatar di Sick Boy
 
Iscritto dal: Dec 2006
Città: Brescia
Messaggi: 497
ciao!

ho bisogno di un aiuto per un programma che copi due concateni due stringhe, tramite l'uso di puntatori. senza usare funzioni della libreria standard.

ho provato a fare così:

Codice:
#include <stdio.h>

int main()
{
  strcon(char *s, char *t)
  {
    while(*s != '\0')
      s++;
    
    while(*t != '\0')
    {
      s + t;
      t++
    }
  }
}
ma con pessimi risultati!
sapete dirmi i (numerosi) punti in cui ho sbagliato e perchè?
grazie.
Sick Boy è offline   Rispondi citando il messaggio o parte di esso
Old 22-05-2008, 15:46   #17
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2788
Codice:
    while(*t != '\0')
    {
      s + t;
      t++
    }
Il pezzo di codice che ti ho evidenziato non fa nulla..

PS: Nel tuo corso non avete ancora parlato di allocazione dinamica? Se sì in questo esercizio penso che dovresti sfruttarla, se no non importa, continua così
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 22-05-2008, 21:18   #18
Sick Boy
Senior Member
 
L'Avatar di Sick Boy
 
Iscritto dal: Dec 2006
Città: Brescia
Messaggi: 497
perchè non fa nulla?
Sick Boy è offline   Rispondi citando il messaggio o parte di esso
Old 22-05-2008, 21:20   #19
grigor91
Senior Member
 
L'Avatar di grigor91
 
Iscritto dal: Dec 2007
Città: brianza
Messaggi: 717
Quote:
Originariamente inviato da Sick Boy Guarda i messaggi
perchè non fa nulla?
perchè il risultato della somma non è assegnato a nessuna variabile.
__________________
AMD Ryzen 9700X MSI RX 480 Gaming X 8G ASRock B850 Pro-A Windows 11 Pro RAM DDR5 16GBx2 TEAMGROUP T-Create Expert 6000 MHz CL30 SSD Crucial T500 4TB case Corsair Carbide 200R
grigor91 è offline   Rispondi citando il messaggio o parte di esso
Old 23-05-2008, 11:48   #20
Sick Boy
Senior Member
 
L'Avatar di Sick Boy
 
Iscritto dal: Dec 2006
Città: Brescia
Messaggi: 497
è vero! ho fatto un sacco di errori in quel codice! dovevo essere fuso!

comunque ho modificato un po' la funzione è compilando questo codice non mi da errore (solo 2-3 warning).

Codice:
#include <stdio.h>

int main()
{
  char *(strcon)(char *s, char *t)
  {
    char *str;
    while(*s != '\0')
      {
      str = s;
      s++;
      str++;
      }

    while(*t != '\0')
    {
      str = t;
      t++;
      str++;
    }
    return *str;
  }

  return 0;
}
però non sono sicuro che funzioni correttamente (ho il dubbio che in str copiasse prima la stringa s e poi la sovrascrivesse con la stringa t). nel main che cosa potrei inserire per testarlo?
grazie ancora per la pazienza
Sick Boy è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è PNY RTX 5080 Slim OC, sembra una Founders Editio...
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei Wi-Fi 7 con il design di una vetta innevata: ecc...
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte Core Ultra 7 270K Plus e Core Ultra 7 250K Plus:...
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu PC Specialist Lafité 14 AI AMD: assemblat...
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto Recensione Nothing Phone 4(a): sempre iconico ma...
Arriva la nuova gamma di PC Dell Pro per...
DJI Avata 360: la recensione del primo d...
Il browser di Samsung arriva su Windows,...
I satelliti AI Sat Mini per i datacenter...
Project Sunrise: l'idea di Blue Origin p...
DJI Avata 360 ufficiale: due sensori da ...
Samsung Galaxy Watch8 Classic a 303€, ma...
AGCOM ordina i primi blocchi DNS di siti...
Google risolve il problema della memoria...
Un altro colpo alle auto elettriche: Pan...
Core Ultra 9 290K Plus: Intel conferma c...
Addio connettori fusi? MSI promette di f...
Basta brani fake su Spotify: la nuova fu...
OPPO Find X9 Ultra: come funziona il riv...
Prezzo diverso per giochi digitali e fis...
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: 16:01.


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