Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2012
    Messaggi
    23

    Problema per definire un sottovettore

    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");
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    A prescindere dal codice (ovviamente sbagliato ...), sapresti indicare la regola?

    Ovvero, quando un vettore B si può dire sottovettore di A?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2012
    Messaggi
    23
    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]

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    156
    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
    codice:
    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...

  5. #5
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    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.

    codice:
    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.

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2012
    Messaggi
    23
    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??

  7. #7
    Originariamente inviato da Who am I
    Alla fine del codice se count vale 5, B è un sottovettore di A.
    Controllalo bene quel codice...

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2012
    Messaggi
    23
    Comunque mi stampa 5 volte 1, anzichè stamparne solo uno..che pizza!!

  9. #9
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    Va aggiunta l' istruzione last=i+1 nell' else.

  10. #10
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    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 !


    codice:
    #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");
    }
    Tecnologia

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.