Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 20-02-2015, 15:21   #1
cicciopantera
Member
 
Iscritto dal: Feb 2015
Messaggi: 50
[C] Esercizio Vettore 2 - principiante

Altro problema in C:
-Acquisire da tastiera elementi interi non nulli che compongono il vettore V (il valore nullo introdotto da tastiera interrompe l'acquisizione e non appartiene al vettore acquisito);
-Acquisire da tastiera un valore intero non nullo VAL e verificare col metodo dicotomico che sia presente nel vettore V;
-Se VAL risulta presente in V, stampare i due valori adiacenti a VAL (quello a sinistra e quello a destra).
Ho lavorato così
Codice:
#include <stdio.h>
#define MAX 100
 
void Input_vettore (int V[], int* N)
{
int m, t=0;
  for (m=0;m<MAX;m++)
  {
 printf("Inserire l'elemento V[%d]", m);
 scanf ("%d", &t);
 if (t!=0) V[m]=t;
 else break;
  }
   *N=m;
}

void Selection_sort(int V[], int N)
{
	int i, j, temp=0;
	for (i=0;i<N-1;i++)
	{
		for (j=i+1;j<N;j++)
		if (V[i]>V[j])
		{
			temp= V[i];
			V[i]=V[j];
			V[j]=temp;
		}
	}
}

void Ricerca_dicotomica(int V[], int N)
{
int sn=0, dx=(N-1), VAL=0, pos=-1, ct=0;
  do
   {
   printf ("Inserire l'elemento VAL da ricercare= \n");
   scanf ("%d", &VAL);
   }
   while (VAL==0);
   do
    {
	ct=((sn+dx)/2);
	if (VAL==V[ct])
     	{
	     pos=ct;
     	 printf ("Il valore e' presente nel vettore, Il valore alla sua sinistra e'= %d\nIl valore alla sua destra e'= %d\n", V[pos-1], V[pos+1]);
     	 system ("PAUSE");
       	}
	else if (V[ct]<VAL) dx=ct-1;
	else sn=ct+1;
     }
     while (sn<dx);
     if (pos=-1)
     {
     	printf("Il valore non e' presente nel vettore\n");
     	system ("PAUSE");
	 }
}

void main()
{
int V[MAX], N;
Input_vettore (V,&N);
Selection_sort (V,N);
Ricerca_dicotomica (V,N);
}
Ma ho un errore nel momento in cui inserisco come VAL proprio uno dei due estremi dell'array ottenendo l'output "Il valore non è presente nel vettore"; come posso ovviare a tale bug?

Grazie
__________________
cicciopantera è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2015, 15:40   #2
monte.cristo
Senior Member
 
Iscritto dal: May 2014
Messaggi: 1381
Innanzitutto, c'è un possibile errore in questa parte di codice
Codice:
if (VAL==V[ct])
     	{
	     pos=ct;
     	     printf ("Il valore e' presente nel vettore, Il valore alla sua sinistra e'= %d\nIl valore alla sua destra e'= %d\n", V[pos-1], V[pos+1]);
     	     system ("PAUSE");
       	}
perchè prendere l'elemento che si trova prima e dopo VAL all'interno dell'array senza nessun controllo può portare a stampare valori inattendibili se VAL è uno dei due estremi del vettore
monte.cristo è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2015, 15:42   #3
cicciopantera
Member
 
Iscritto dal: Feb 2015
Messaggi: 50
Capisco...come posso risolvere?
__________________
cicciopantera è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2015, 16:10   #4
monte.cristo
Senior Member
 
Iscritto dal: May 2014
Messaggi: 1381
Quote:
Capisco...come posso risolvere?
Bè, ti ho già detto in che punto si trova il possibile errore e quali sono le condizioni che possono dare un risultato non previsto. Direi che trovare la soluzione è compito di chi fa l'esercizio perchè sta imparando il linguaggio.
monte.cristo è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2015, 16:35   #5
cicciopantera
Member
 
Iscritto dal: Feb 2015
Messaggi: 50
Provo e riprovo, sono in altomare...
__________________
cicciopantera è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2015, 18:00   #6
cicciopantera
Member
 
Iscritto dal: Feb 2015
Messaggi: 50
Non penso sia una tragedia greca effettuare una correzione, d'altronde i professori correggono non dicono "correggi tu"....o sbaglio?
__________________
cicciopantera è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2015, 18:55   #7
Oceans11
Senior Member
 
L'Avatar di Oceans11
 
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
Quote:
Originariamente inviato da cicciopantera Guarda i messaggi
Non penso sia una tragedia greca effettuare una correzione, d'altronde i professori correggono non dicono "correggi tu"....o sbaglio?
Correggono loro, ma ti abbassano il voto

Il problema te l'hanno già fatto notare (abbastanza chiaramente direi)
Quote:
prendere l'elemento che si trova prima e dopo VAL all'interno dell'array senza nessun controllo può portare a stampare valori inattendibili se VAL è uno dei due estremi del vettore
Io leggo la frase e mi dico subito "bene, controlliamo se VAL è uno dei due estremi del vettore". (In caso affermativo evito di stampare uno dei due estremi "inesistenti"
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes]
"Pirating software? Choose Microsoft!"
Oceans11 è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2015, 19:10   #8
cicciopantera
Member
 
Iscritto dal: Feb 2015
Messaggi: 50
Codice:
#include <stdio.h>
#define MAX 100
 
void Input_vettore (int V[], int* N)
{
int m, t=0;
  for (m=0;m<MAX;m++)
  {
 printf("Inserire l'elemento V[%d] ", m);
 scanf ("%d", &t);
 if (t!=0) V[m]=t;
 else break;
  }
   *N=m;
}

void Selection_sort(int V[], int N)
{
	int i, j, temp=0;
	for (i=0;i<N-1;i++)
	{
		for (j=i+1;j<N;j++)
		if (V[i]>V[j])
		{
			temp= V[i];
			V[i]=V[j];
			V[j]=temp;
		}
	}
}

void Ricerca_dicotomica(int V[], int N)
{
int sn=0, dx=(N-1), VAL=0, pos=-1, ct=0;
  do
   {
   printf ("Inserire l'elemento VAL da ricercare=\n");
   scanf ("%d", &VAL);
   }
   while (VAL==0);
   if (VAL==V[sn])
   {
   	pos=sn;
   	printf ("Il valore e' presente nel vettore, Il valore alla sua sinistra non esiste\nIl valore alla sua destra e'= %d\n", V[sn+1]);
   	system ("PAUSE");
   }
   else if(VAL==V[dx])
   {
   	pos=dx;
   	printf ("Il valore e' presente nel vettore, Il valore alla sua sinistra e'= %d\nIl valore alla sua destra non esiste\n", V[dx-1]);
   	 system ("PAUSE");
   }
   else do
    {
	ct=((sn+dx)/2);
	if (VAL==V[ct])
     	{
	     pos=ct;
     	 printf ("Il valore e' presente nel vettore, Il valore alla sua sinistra è= %d\nIl valore alla sua destra è= %d\n", V[pos-1], V[pos+1]);
     	 system ("PAUSE");
       	}
	else if (V[ct]<VAL) dx=ct-1;
	else sn=ct+1;
     }
     while (sn<dx);
     if (pos=-1)
     {
     	printf("Il valore non e' 'presente nel vettore\n");
     	system ("PAUSE");
	 }
}

void main()
{
int V[MAX], N;
Input_vettore (V,&N);
Selection_sort (V,N);
Ricerca_dicotomica (V,N);
}
Ho fatto così e dovrebbe andare; ci sono errori?
__________________

Ultima modifica di cicciopantera : 21-02-2015 alle 17:37.
cicciopantera è offline   Rispondi citando il messaggio o parte di esso
Old 21-02-2015, 10:44   #9
Oceans11
Senior Member
 
L'Avatar di Oceans11
 
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
Quote:
Originariamente inviato da cicciopantera Guarda i messaggi
Codice:
/* PROBLEMA RISOLTO: Andavano inseriti due if e all'else finale andava collegato il do del caso comune*/
#include <stdio.h>
#define MAX 100
 
void Input_vettore (int V[], int* N)
{
int m, t=0;
  for (m=0;m<MAX;m++)
  {
 printf("Inserire l'elemento V[%d] ", m);
 scanf ("%d", &t);
 if (t!=0) V[m]=t;
 else break;
  }
   *N=m;
}

void Selection_sort(int V[], int N)
{
	int i, j, temp=0;
	for (i=0;i<N-1;i++)
	{
		for (j=i+1;j<N;j++)
		if (V[i]>V[j])
		{
			temp= V[i];
			V[i]=V[j];
			V[j]=temp;
		}
	}
}

void Ricerca_dicotomica(int V[], int N)
{
int sn=0, dx=(N-1), VAL=0, pos=-1, ct=0;
  do
   {
   printf ("Inserire l'elemento VAL da ricercare=\n");
   scanf ("%d", &VAL);
   }
   while (VAL==0);
   if (VAL==V[sn])
   {
   	pos=sn;
   	printf ("Il valore e' presente nel vettore, Il valore alla sua sinistra non esiste\nIl valore alla sua destra e'= %d\n", V[sn+1]);
   	system ("PAUSE");
   }
   else if(VAL==V[dx])
   {
   	pos=dx;
   	printf ("Il valore e' presente nel vettore, Il valore alla sua sinistra e'= %d\nIl valore alla sua destra non esiste\n", V[dx-1]);
   	 system ("PAUSE");
   }
   else do
    {
	ct=((sn+dx)/2);
	if (VAL==V[ct])
     	{
	     pos=ct;
     	 printf ("Il valore e' presente nel vettore, Il valore alla sua sinistra è= %d\nIl valore alla sua destra è= %d\n", V[pos-1], V[pos+1]);
     	 system ("PAUSE");
       	}
	else if (V[ct]<VAL) dx=ct-1;
	else sn=ct+1;
     }
     while (sn<dx);
     if (pos=-1)
     {
     	printf("Il valore non e' 'presente nel vettore\n");
     	system ("PAUSE");
	 }
}

void main()
{
int V[MAX], N;
Input_vettore (V,&N);
Selection_sort (V,N);
Ricerca_dicotomica (V,N);
}
Ho fatto così e dovrebbe andare; ci sono errori?
scusa, ma l'hai testato il codice?
almeno hai provato a compilarlo?
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes]
"Pirating software? Choose Microsoft!"
Oceans11 è offline   Rispondi citando il messaggio o parte di esso
Old 21-02-2015, 11:23   #10
cicciopantera
Member
 
Iscritto dal: Feb 2015
Messaggi: 50
Si funzionante senza bug; chiedevo nel caso in cui ci fossero elementi superflui o altro, non so...
Complessità di questo?
__________________
cicciopantera è offline   Rispondi citando il messaggio o parte di esso
Old 21-02-2015, 16:10   #11
Oceans11
Senior Member
 
L'Avatar di Oceans11
 
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
Quote:
Originariamente inviato da cicciopantera Guarda i messaggi
Si funzionante senza bug; chiedevo nel caso in cui ci fossero elementi superflui o altro, non so...
Complessità di questo?
Codice:
 if (pos=-1)
secondo me non funziona
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes]
"Pirating software? Choose Microsoft!"
Oceans11 è offline   Rispondi citando il messaggio o parte di esso
Old 21-02-2015, 17:48   #12
cicciopantera
Member
 
Iscritto dal: Feb 2015
Messaggi: 50
Si ha senso, se pos rimane a -1 e non è stato aggiornato al ct allora non ci sarà sicuramente nessun valore; penso il ragionamento fili....
__________________
cicciopantera è offline   Rispondi citando il messaggio o parte di esso
Old 21-02-2015, 18:47   #13
Oceans11
Senior Member
 
L'Avatar di Oceans11
 
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
Codice:
$ gcc -Wall -c es.c
es.c:66:2: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
  if (pos=-1)
ok, non il miglior warning del mondo, ma ci puoi arrivare al problema.
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes]
"Pirating software? Choose Microsoft!"
Oceans11 è offline   Rispondi citando il messaggio o parte di esso
Old 22-02-2015, 12:38   #14
lorenzo001
Senior Member
 
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
Basta che ti chiedi perché per quella parentesi l'avviso parla di

assignment
lorenzo001 è offline   Rispondi citando il messaggio o parte di esso
Old 22-02-2015, 12:40   #15
cicciopantera
Member
 
Iscritto dal: Feb 2015
Messaggi: 50
non capisco...
__________________
cicciopantera è offline   Rispondi citando il messaggio o parte di esso
Old 22-02-2015, 13:04   #16
lorenzo001
Senior Member
 
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
Prendi due if del tuo codice e mettile a confronto. Che differenze noti?
lorenzo001 è offline   Rispondi citando il messaggio o parte di esso
Old 22-02-2015, 14:48   #17
cicciopantera
Member
 
Iscritto dal: Feb 2015
Messaggi: 50
intendi forse: pos==-1 e non con un solo " = "?
__________________
cicciopantera è offline   Rispondi citando il messaggio o parte di esso
Old 22-02-2015, 15:56   #18
lorenzo001
Senior Member
 
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
Tu che dici? Ti sembra la stessa cosa?
lorenzo001 è offline   Rispondi citando il messaggio o parte di esso
Old 22-02-2015, 15:59   #19
cicciopantera
Member
 
Iscritto dal: Feb 2015
Messaggi: 50
No no, hai pienamente ragione
__________________
cicciopantera è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
Dopo 23 anni di silenzio, Warcraft 3 spi...
Roblox sfida l'ecosistema gaming: app st...
OpenAI accusata di plagio dai migliori m...
Altro attacco hacker dell'IA: gli agenti...
Stiamo davvero perdendo il controllo del...
Microsoft perde un pilastro: Frank Shaw ...
Diablo V annunciato a sorpresa: il colpo...
Meno di 5 euro per il 5G: l'offerta Kena...
World of Warcraft: Forever è il Classic+...
La Serie A con DAZN e Amazon Prime con l...
Giochi Ubisoft su Steam senza Ubisoft Co...
Miami Beach ha autorizzato la maxi opera...
Apple regala un altro anno di funzioni s...
Alla fine è successo davvero: Vol...
Il meglio di Amazon del weekend in uno s...
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: 13:51.


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