Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Grazie ad un mocio rotante che viene costantemente bagnato e pulito, Narwal Flow assicura un completo e capillare lavaggio dei pavimenti di casa. La logica di intellignza artificiale integrata guida nella pulizia tra i diversi locali, sfruttando un motore di aspirazione molto potente e un sistema basculante per la spazzola molto efficace sui tappeti di casa
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi
Con un prezzo di 2.999 euro, il Panasonic Z95BEG entra nella fascia ultra-premium dei TV OLED: pannello Primary RGB Tandem, sistema di raffreddamento ThermalFlow, audio Technics integrato e funzioni gaming avanzate lo pongono come un punto di riferimento
HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione
HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione
Abbiamo provato per diverse settimane il nuovo Magic V5 di HONOR, uno smartphone pieghevole che ci ha davvero stupito. Il device è il più sottile (solo 4.1mm) ma non gli manca praticamente nulla. Potenza garantita dallo Snapdragon 8 Elite, fotocamere di ottima qualità e batteria in silicio-carbonio che garantisce un'ottima autonomia. E il Prezzo? Vi diciamo tutto nella nostra recensione completa.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-09-2011, 23:07   #1
>Alexan<
Member
 
L'Avatar di >Alexan<
 
Iscritto dal: Feb 2006
Città: Bracciano (RM)
Messaggi: 243
[C++] Errore di segmentazione

ho fatto un programmino semplice semplice per calcolare la norma di un vettore...
il codice è il seguente:

Codice:
#include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;

typedef double vettore[21];

void leggi_int(int&);
void leggi_vettore(vettore,int);
double norm2(vettore,int);

main()
{
  int n,i;double norma;vettore v;
  leggi_int(n);
  leggi_vettore(v,n);
  norma=norm2(v,n);
  cout << setprecision(19) << norma << endl;
  return 0;
}

void leggi_int(int& n)
{
  cout << "\n\n  inserire un numero intero maggiore di uno e minore di 20\n\n     ";cin >> n;
  if ((n<2)||(n>19))
    {
      cout << "\n\n  il valore inserito non è accettabile!!!";
      return leggi_int(n);
    }
  return;
}

void leggi_vettore(vettore v,int n)
{
  int i;
  for (i=1;i<=n;i++)
    {
      cout << "\n  inserire la componente numero " << i << "\n     ";cin >> v[i];
    }
  return;
}

double norm2(vettore v,int n)
{
  int i;double norma=0;
  for (i=1;1<=n;i++) norma=norma+v[i]*v[i];  // l'errore è qui!!
  norma=sqrt(norma);
  return norma;
}
quando vado a compilare mi dà errore di segmentazione... dovrebbe essere alla riga che ho segnato nel corpo della funzione "norm2", ma non riesco a capire perchè sia sbagliato...
qualcuno può darmi una mano??
__________________
My Mod
>Alexan< è offline   Rispondi citando il messaggio o parte di esso
Old 18-09-2011, 23:26   #2
Freaxxx
Senior Member
 
L'Avatar di Freaxxx
 
Iscritto dal: Dec 2006
Messaggi: 3808
Quote:
Originariamente inviato da >Alexan< Guarda i messaggi
ho fatto un programmino semplice semplice per calcolare la norma di un vettore...
il codice è il seguente:

Codice:
#include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;

typedef double vettore[21];

void leggi_int(int&);
void leggi_vettore(vettore,int);
double norm2(vettore,int);

main()
{
  int n,i;double norma;vettore v;
  leggi_int(n);
  leggi_vettore(v,n);
  norma=norm2(v,n);
  cout << setprecision(19) << norma << endl;
  return 0;
}

void leggi_int(int& n)
{
  cout << "\n\n  inserire un numero intero maggiore di uno e minore di 20\n\n     ";cin >> n;
  if ((n<2)||(n>19))
    {
      cout << "\n\n  il valore inserito non è accettabile!!!";
      return leggi_int(n);
    }
  return;
}

void leggi_vettore(vettore v,int n)
{
  int i;
  for (i=1;i<=n;i++)
    {
      cout << "\n  inserire la componente numero " << i << "\n     ";cin >> v[i];
    }
  return;
}

double norm2(vettore v,int n)
{
  int i;double norma=0;
  for (i=1;1<=n;i++) norma=norma+v[i]*v[i];  // l'errore è qui!!
  norma=sqrt(norma);
  return norma;
}
quando vado a compilare mi dà errore di segmentazione... dovrebbe essere alla riga che ho segnato nel corpo della funzione "norm2", ma non riesco a capire perchè sia sbagliato...
qualcuno può darmi una mano??
prova a mettere quel v[i] tra parentesi tonde insieme al v[i] che precede

Codice:
for (i=1;1<=n;i++) norma=norma+(v[i])*(v[i]);
Freaxxx è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2011, 08:23   #3
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da >Alexan< Guarda i messaggi
ho fatto un programmino semplice semplice per calcolare la norma di un vettore...
il codice è il seguente:

Codice:
  for (i=1;i<=n;i++)
    {
      cout << "\n  inserire la componente numero " << i << "\n     ";cin >> v[i];
    }
In C++ gli indici di un vettore di dimensione N vanno da 0 a N-1, non da 1 a N
I cicli for andrebbero riscritti come
Codice:
for (int i=0; i<n; ++i)
// ...
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2011, 08:59   #4
ESSE-EFFE
Member
 
Iscritto dal: May 2009
Messaggi: 186
Attenzione:

Quote:
Originariamente inviato da >Alexan< Guarda i messaggi
Codice:
double norm2(vettore v,int n)
{
  int i;double norma=0;
  for (i=1;1<=n;i++) norma=norma+v[i]*v[i];  // l'errore è qui!!
  norma=sqrt(norma);
  return norma;
}
__________________
ESSE-EFFE.com
Sviluppo software e Web
Creazione loghi - Bergamo
ESSE-EFFE è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2011, 09:42   #5
>Alexan<
Member
 
L'Avatar di >Alexan<
 
Iscritto dal: Feb 2006
Città: Bracciano (RM)
Messaggi: 243
lo so, ma ho definito la variabile vettore come un array che ha dimensione sempre di almeno n+1, appunto per comodità nel definire i cicli!
anche correggendo il programma come dite voi l'errore c'è lo stesso!

P.S. @Freaxxx: ho provato anche a mettere le parentesi come hai detto tu, ma non risolve...

Scusate... non avevo visto che nell'ultimo ciclo c'è un 1 invece della i... grazie ESSE-EFFE!
__________________
My Mod

Ultima modifica di >Alexan< : 19-09-2011 alle 09:47.
>Alexan< è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2011, 09:45   #6
ESSE-EFFE
Member
 
Iscritto dal: May 2009
Messaggi: 186
Quote:
Originariamente inviato da >Alexan< Guarda i messaggi
anche correggendo il programma come dite voi l'errore c'è lo stesso!
Scusa, ma hai visto l'errore che ho evidenziato?
__________________
ESSE-EFFE.com
Sviluppo software e Web
Creazione loghi - Bergamo
ESSE-EFFE è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2011, 09:48   #7
pabloski
Senior Member
 
Iscritto dal: Jan 2008
Messaggi: 8406
Codice:
for (i=1;1<=n;i++) norma=norma+v[i]*v[i];

che erroraccio

1 <= n??? è i <= n, altrimenti logicamente va in loop e i arriva alle stelle
pabloski è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2011, 11:52   #8
>Alexan<
Member
 
L'Avatar di >Alexan<
 
Iscritto dal: Feb 2006
Città: Bracciano (RM)
Messaggi: 243
Quote:
Originariamente inviato da ESSE-EFFE Guarda i messaggi
Scusa, ma hai visto l'errore che ho evidenziato?
si si!! ho editato il messaggio prima che rispondessi di nuovo!
grazie ancora a tutti!
__________________
My Mod
>Alexan< è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2011, 13:49   #9
Emalele1688
Member
 
Iscritto dal: Oct 2009
Messaggi: 157
Gli errori di segmentazione sono la cosa per cui mi ci cemento fino all'esaurimento. Usa software di Debugging, o il debugger incluso nel tuo compilatore. Ti facilita la vita ed eviti nervi ed arrabbiature contro il tuo PC
Emalele1688 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio Narwal Flow: con il mocio orizzontale lava i pav...
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi Panasonic 55Z95BEG cala gli assi: pannello Tande...
HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione HONOR Magic V5: il pieghevole ultra sottile e co...
Recensione Google Pixel 10 Pro XL: uno zoom 100x assurdo sempre in tasca (e molto altro) Recensione Google Pixel 10 Pro XL: uno zoom 100x...
Lenovo IdeaPad Slim 3: un notebook Snapdragon X economico Lenovo IdeaPad Slim 3: un notebook Snapdragon X ...
Gli USA e la NASA non vogliono perdere l...
Il nuovo iPhone 17 Air ha già un clone A...
Una capsula SpaceX Dragon ha acceso i mo...
3 nuovissime offerte sottocosto pi&ugrav...
Robot aspirapolvere Roborock Q7 M5 a pre...
Offerte sui TV LG su Amazon: OLED evo e ...
Il Galaxy Z Fold 7 è un successo:...
Amazon abbatte i prezzi hardware: come p...
Eureka J15 Ultra imbarazza la concorrenz...
ChatGPT: il piano Free diventa più...
Il prossimo top di gamma di Vivo sarà il...
Sony mostra in anteprima la propria tecn...
Dreame A3 AWD: a IFA 2025 debutta il rob...
OpenAI, il chip proprietario per l'AI &e...
OnePlus e Hasselblad si separano: una nu...
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:35.


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