|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
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);
}
Grazie
__________________
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2014
Messaggi: 1370
|
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");
}
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Feb 2015
Messaggi: 50
|
Capisco...come posso risolvere?
__________________
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: May 2014
Messaggi: 1370
|
Quote:
|
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Feb 2015
Messaggi: 50
|
Provo e riprovo, sono in altomare...
__________________
|
|
|
|
|
|
#6 |
|
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?
__________________
|
|
|
|
|
|
#7 | ||
|
Senior Member
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
|
Quote:
Il problema te l'hanno già fatto notare (abbastanza chiaramente direi) Quote:
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes] "Pirating software? Choose Microsoft!" |
||
|
|
|
|
|
#8 |
|
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);
}
__________________
Ultima modifica di cicciopantera : 21-02-2015 alle 18:37. |
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
|
Quote:
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!" |
|
|
|
|
|
|
#10 |
|
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?
__________________
|
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
|
Quote:
Codice:
if (pos=-1)
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes] "Pirating software? Choose Microsoft!" |
|
|
|
|
|
|
#12 |
|
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....
__________________
|
|
|
|
|
|
#13 |
|
Senior Member
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)
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes] "Pirating software? Choose Microsoft!" |
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
|
Basta che ti chiedi perché per quella parentesi l'avviso parla di
assignment |
|
|
|
|
|
#15 |
|
Member
Iscritto dal: Feb 2015
Messaggi: 50
|
non capisco...
__________________
|
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
|
Prendi due if del tuo codice e mettile a confronto. Che differenze noti?
|
|
|
|
|
|
#17 |
|
Member
Iscritto dal: Feb 2015
Messaggi: 50
|
intendi forse: pos==-1 e non con un solo " = "?
__________________
|
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
|
Tu che dici? Ti sembra la stessa cosa?
|
|
|
|
|
|
#19 |
|
Member
Iscritto dal: Feb 2015
Messaggi: 50
|
No no, hai pienamente ragione
__________________
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:03.




















