freestuff.gr αρχική σελίδα
 FAQFAQ    ΑναζήτησηΑναζήτηση   Λίστα ΜελώνΛίστα Μελών   Ομάδες ΜελώνΟμάδες Μελών   <b>Εγγραφή Μέλους</b>Εγγραφή Μέλους 
 ΠροφίλΠροφίλ   Επιλογές μέλους Επιλογές   Τα bookmarks μου Τα bookmarks μου   Προσωπικά μηνύματαΠροσωπικά μηνύματα 
  διαφήμιση  

Καλώς ήρθατε στο forum μας! Για να συμμετάσχετε στις συζητήσεις θα πρέπει να είσαστε μέλος. Γίνετε μέλος τώρα!.

Πρόβλημα με αναζήτηση σε δισδιάστατο πίνακα


 Forum index » Δημιουργία Web Sites, Γραφικών & Προγραμματισμός » Γλώσσες Προγραμματισμού » C, C++
Moderators:  Super-Moderators, WebDev Moderators
Εισαγωγή νέου Θέματος   Απάντηση στο Θέμα Σελίδα 1 από 1 [5 Μηνύματα]      Bookmarks Tags: αναζήτηση Mark the topic unread :: Προηγούμενο θέμα :: Επόμενο θέμα
ΑποστολέαςΜήνυμα
terminatorvasilis


Μέλος από: 22 Ιουν 2010
Μηνύματα: 13

View users profile
ΜήνυμαΣτις: 30 Ιουν 2010 22:53    Θέμα: Πρόβλημα με αναζήτηση σε δισδιάστατο πίνακα Απάντηση με παράθεση  Mark this post and the followings unread

Καλησπέρα.Προσπαθώ να φτιάξω ένα πρόγραμμα το οποίο θα αναζητά σε δισδιάστατο πίνακα ο οποίος περιέχει ονόματα,ένα όνομα.Στη συνέχεια,μόλις το βρεί θα σταματάει το ψάξιμο και θα εμφανίζει το όνομα καθώς και σε ποιά θέση βρίσκεται.Το πρόβλημα είναι οτι μετα απο την εκχώρηση των ονομάτων στον Α ,μόλις διαβάζει το όνομα στον Β μου γράφουν τα windows link to windows ότι το πρόγραμμα πρέπει να τερματιστεί.Θα μπορούσε κάποιος να μου πεί που έχω κάνει λάθη;

κώδικας:
#include <stdio.h>
int main (void)
{
    int i,j,position1,position2,flag=0;

    char B[5],A[2][2];

    for(i=0; i<2; i++){
    for(j=0; j<2; j++){

        printf("give a name\n");
        scanf("%s",&A[i][j]);
    }
    }


    printf("dose stoixeio pros anazitisi\n");
    scanf("%s",&B[i]);
        i=0;
        j=0;
        while( i<2 && j<2 &&flag==0 ){


        if(B[i]==A[i][j]){
            flag=1;
            position1=i;
            position2=j;
        }

        i++;
        j++;
        }

            if(flag==1){

        printf("%s is in %i%i position",B[i],position1,position2);
            }
            else{
                printf("den vrethike to onoma");

}
            return 0;

}
dva_dev
Script Master

Μέλος από: 16 Σεπ 2005
Μηνύματα: 256+

View users profile Visit posters website
blog deviantART facebook linkedin 
ΜήνυμαΣτις: 30 Ιουν 2010 23:18    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Διάβασε στη C τι είναι τα strings, πως αποθηκεύονται, πόσο χώρο χρειάζονται, τι είναι οι πίνακες χαρακτήρων, ποιά είναι η σχέση τους με τα strings, πως δηλώνονται οι πίνακες από strings (οι μονοδιάστατοι), πως δηλώνονται οι πίνακες από strings (οι δισδιάστατοι), και ξαναπιάστο από την αρχή.

ΥΓ. Κανονικά θα έπρεπε να σου χτυπάει από τη στιγμή που δίνεις το 1ο κιόλας όνομα για καταχώρηση, αλλά μάλλον είσαι πιο τυχερός απ' όσο φαντάζεσαι.
terminatorvasilis


Μέλος από: 22 Ιουν 2010
Μηνύματα: 13

View users profile
ΜήνυμαΣτις: 30 Ιουν 2010 23:20    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Oκ θα το κάνω.
virxen75


Μέλος από: 18 Φεβ 2009
Μηνύματα: 256+
Περιοχή: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ
View users profile
ΜήνυμαΣτις: 30 Ιουν 2010 23:31    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

1) μετά από κάθε scanf βάζε αμέσως μία getchar(); για να καταναλώνει το enter
2) άλλο δισδιαστατος πίνακας ακεραίων και άλλο πίνακας string
int a[2][2]; ---->char b[2][2][50] το 50 δηλώνει το μέγιστο μήκος της συμβολοσειράς
που θα εισαχθει στον 2χ2 πίνακα b
3)αυτό με το while πως σου ήρθε?
στους δισδιάστατους πίνακες ένα διπλό for είναι ότι καλύτερο
4)όταν διαβάζεις ένα string στην scanf βάζεις το όνομα του και όχι την διάσταση του
όχι δηλαδή scanf("%s",&B[5]); αλλά scanf("%s",&B);
5)σύγκριση 2 string γίνεται με την εντολή strcmp( #include <string.h> )
6)με το break σταματάμε την εκτέλεση ενός βρόγχου π.χ. for


και τέλος ο κώδικας ολοκληρωμένος είναι



κώδικας:

#include <stdio.h>
#include <string.h>

int main (void){
    int i,j,position1,position2,flag=0;
    char B[50],A[2][2][50];

    for(i=0; i<2; i++){
    for(j=0; j<2; j++){
        printf("give a name(A[%d][%d]):",i,j);
        scanf("%s",&A[i][j]);
        getchar();
    }
    }


    printf("dose stoixeio pros anazitisi:");
    scanf("%s",&B);
    getchar();
        for (i=0;i<2;i++)
          for (j=0;j<2;j++){
            if(strcmp(B,A[i][j])==0){
                flag=1;
                position1=i;
                position2=j;
                break;
            }
          }
            if(flag==1){
               printf("%s is in %d,%d position",B,position1,position2);
            }
            else{
                printf("den vrethike to onoma");
            }
getchar();
            return 0;

}
terminatorvasilis


Μέλος από: 22 Ιουν 2010
Μηνύματα: 13

View users profile
ΜήνυμαΣτις: 30 Ιουν 2010 23:49    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Πράγματι τώρα δουλεύει!Σε ευχαριστώ πολύ!!Θα διαβάσω αρκετά το κεφάλαιο με τους πίνακες,δείκτες,για τη μνήμη ώστε την επόμενη φορά να έχω ένα λάθος όχι ολόκληρο πρόγραμμα
Εμφάνιση Μηνυμάτων:   
Εισαγωγή νέου Θέματος   Απάντηση στο Θέμα Σελίδα 1 από 1 [5 Μηνύματα] Mark the topic unread :: Προηγούμενο θέμα :: Επόμενο θέμα
 Forum index » Δημιουργία Web Sites, Γραφικών & Προγραμματισμός » Γλώσσες Προγραμματισμού » C, C++
Τώρα είναι 11 Δεκ 2016 02:12 | All times are UTC + 2


Email This Page to Someone! add to Favorites

     Powered by p h p B B © 2001,2005 p h p B B Group
Για άμεση επικοινωνία με τον διαχειριστή του freestuff.gr στο email: freestuff.gr(παπάκι)gmail.com


Copyright © 1999-2013 Freestuff.gr All Rights Reserved  
Version Aegean, designed by N. Tsaganos