PDA

Visualizza la versione completa : [C] Problema per definire un sottovettore


Pumpi
05-04-2012, 20:25
Ciao a tutti!!!sono nuova del forum..e ho un problema che mi assilla da giorni e non riesco a risolverlo..devo scrivere un programma in C/C++ chee legga da tastiera valori interi e li inserisca in due vettori A e B di dimensioni rispettivamente 10 e 5. Il programma deve verificare se B e' sottovettore di A; stampare 1 se B sottovettore e 0 se non lo .

Per la prima parte non c' problema, per non s dove sbaglio nell'inserire le altre cose..Vi mostro il mio programma, ma sbaglio proprio a definire B come sottovettore..spero che qualcuno possa aiutarmi!!!NON DORMO PI!!!


#include <stdio.h>
#include <stdlib.h>
#define N 10
#define M 5
int main(){
int A[N];
int B[M];
int i;
int j;
{ for(i=0;i<N;i++){
scanf("%d", &A[i]);}}
{
for(j=0;j<M;j++){
scanf("%d", &B[j]);}}
for(i=0;i<N;i++){
if(A[i]==B[j])
printf("1");
else
printf("0");}
system("PAUSE");
}

oregon
05-04-2012, 20:35
A prescindere dal codice (ovviamente sbagliato ...), sapresti indicare la regola?

Ovvero, quando un vettore B si pu dire sottovettore di A?

Pumpi
05-04-2012, 22:01
Un sottovettore B di A un vettore i cui elementi appartengono ad A e sono consecutivi, esempio:
A=[1,2,3,4,5,6,7,8,9,10]
B=[3,4,5,6,7]

Rising1
05-04-2012, 22:56
Originariamente inviato da Pumpi
Un sottovettore B di A un vettore i cui elementi appartengono ad A e sono consecutivi, esempio:
A=[1,2,3,4,5,6,7,8,9,10]
B=[3,4,5,6,7]

ed quello che stai facendo?
non credo


for(i=0;i<N;i++){
if(A[i]==B[j])
printf("1");
else
printf("0");}
cosa fai in questa parte di programma?
a parte che con B cerchi di usare un indice che non c'entra niente...

Who am I
05-04-2012, 23:10
B ha una sua dimensione,che chiamo M.
Se iterando su A riesci a trovare una sequenza valida di elementi uguali tra loro, e questa sequenza lunga M, allora B un sottovettore di A.



int j=0,count=0,last=0,M=sizeof(B)/sizeof(int);
for(i=0;i<N && count!=M;i++)
{
if(A[i]==B[j])
{
count++;
j++;
}
else
{
count=0;
j=0;
i=last;
}
}


Alla fine del codice se count vale 5, B un sottovettore di A.

Pumpi
06-04-2012, 10:49
E quindi per poter stampare 1 o 0 a seconda se sia sottovettore o no basta che inserisco printf("1") e printf("0") alla fine degli if??

ESSE-EFFE
06-04-2012, 11:24
Originariamente inviato da Who am I
Alla fine del codice se count vale 5, B un sottovettore di A.
Controllalo bene quel codice...

Pumpi
06-04-2012, 13:17
Comunque mi stampa 5 volte 1, anzich stamparne solo uno..che pizza!!

Who am I
06-04-2012, 13:27
Va aggiunta l' istruzione last=i+1 nell' else.

torn24
06-04-2012, 13:36
Dovresti modificare un po , il programma di partenza !





questo il tuo programma modificato , che stampa 1 se sottoarray , 0 se no
ma poi ,potresti stampare una stringa che ti dice sottovettore o no !





#include <stdio.h>
#include <stdlib.h>
#define N 10
#define M 5
int main(){
int A[N];
int B[M];
int i;
int j=0,count=0;

for(i=0;i<N;i++)
{
scanf("%d", &A[i]);
}
{
for(i=0;i<M;i++)
{
scanf("%d", &B[i]);

}
/* questo il codice di Who am I
con una correzzione , che permette di stabilire se B e sottoarray di A
ovvio che bisognerebbe studiarselo , e cercare di capire il funzionamento
*/

for(i=0;i<N && count!=M;i++)
{
if(A[i]==B[j])
{
count++;
j++;
}
else
{
count=0;
j=0;
if(A[i]==B[0])
i--;
/*ho aggiunto questo controllo , che se il numero non fa parte della sucessione
del sottoarray ma uguale al primo elemento del sottoarray , il confronto riparte
da questo numero , non so spiegarmi meglio !*/
}
}

if(M==count)
printf("B e' sottovettore di A \n");
else
printf("B non e' sottovettore di A \n");

system("PAUSE");
}

Loading