Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Diablo II Resurrected: il nuovo DLC Reign of the Warlock
Diablo II Resurrected: il nuovo DLC Reign of the Warlock
Abbiamo provato per voi il nuovo DLC lanciato a sorpresa da Blizzard per Diablo II: Resurrected e quella che segue è una disamina dei nuovi contenuti che abbiamo avuto modo di sperimentare nel corso delle nostre sessioni di gioco, con particolare riguardo per la nuova classe dello Stregone
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup
Siamo tornati nel parco tecnologico di Trieste per il kick-off del programma che mette a disposizione di cinque startup le infrastrutture di ricerca, dal sincrotrone Elettra ai laboratori di genomica e HPC. Roberto Pillon racconta il modello e la visione
HP OMEN MAX 16 con RTX 5080: potenza da desktop replacement a prezzo competitivo
HP OMEN MAX 16 con RTX 5080: potenza da desktop replacement a prezzo competitivo
HP OMEN MAX 16-ak0001nl combina RTX 5080 Laptop e Ryzen AI 9 HX 375 in un desktop replacement potente e ben raffreddato, con display 240 Hz e dotazione completa. Autonomia limitata e calibrazione non perfetta frenano l'entusiasmo, ma a 2.609 euro è tra le proposte più interessanti della categoria.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 20-02-2015, 16: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, 16:40   #2
monte.cristo
Senior Member
 
Iscritto dal: May 2014
Messaggi: 1378
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, 16: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, 17:10   #4
monte.cristo
Senior Member
 
Iscritto dal: May 2014
Messaggi: 1378
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, 17: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, 19: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, 19: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, 20: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 18:37.
cicciopantera è offline   Rispondi citando il messaggio o parte di esso
Old 21-02-2015, 11: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, 12: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, 17: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, 18: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, 19: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, 13: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, 13: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, 14: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, 15: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, 16: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, 16: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


Diablo II Resurrected: il nuovo DLC Reign of the Warlock Diablo II Resurrected: il nuovo DLC Reign of the...
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup Deep Tech Revolution: così Area Science P...
HP OMEN MAX 16 con RTX 5080: potenza da desktop replacement a prezzo competitivo HP OMEN MAX 16 con RTX 5080: potenza da desktop ...
Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta Recensione Google Pixel 10a, si migliora poco ma...
6G, da rete che trasporta dati a rete intelligente: Qualcomm accelera al MWC 2026 6G, da rete che trasporta dati a rete intelligen...
Blue Origin propone di utilizzare Blue R...
Sora all'interno di ChatGPT: aumentano g...
L'Ufficio dell'Ispettore Generale ha ana...
Primo contatto con Volvo ES90: ammiragli...
La Cina potrebbe puntare con maggiore de...
Un clamoroso errore strategico: il nuovo...
Cos’è il nuovo cartello del "...
HP: gli attacchi con l'IA puntano su vel...
Acer compie 50 anni e si trasforma: dall...
La rete elettrica USA funziona solo a me...
La Corte Costituzionale albanese: 'Il ba...
Secondo trailer del nuovo anime di Ken i...
La guerra tra Russia e Ucraina arriva co...
KadNap: il botnet che ha infettato 14.00...
Il cloud è sempre più cent...
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: 00:08.


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