Προς το περιεχόμενο
  • Εγγραφή
  • 0

Συνάρτηση που επιστρέφει τη θέση του στοιχείου ενός πίνακα


lektikos

Ερώτηση

#include <stdio.h>
#include <stdlib.h>

int thesi_Stoixeiou(int pin[],int s)
{
    int count=0;
    int p=0;
    for(; p<5; p++)
         if(*(pin+p)==s)
         //count++;
       return p;
}

int main()
{
    int nums[5];                               
    int num, i;
    int thesi=0;
    printf("Eisodos pente Stoixeiwn:\n");
     for(i=0; i<5; i++)
      scanf("%d",nums+i);

       printf("To stoixeio brethike sth thesi %d\n",thesi_Stoixeiou(nums,thesi));


    system("pause");
    return 0;
}

 

Το λάθος είναι ότι τυπώνει τις φορές που τυχόν επαναλαμβάνεται μια τιμή του πίνακα.

Πως μπορώ να τυπώσω τη θέση/θέσεις του/των στοιχείου/ων?

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • Απαντήσεις 70
  • Δημιουργία
  • Τελευταία απάντηση

Συχνή συμμετοχή στην ερώτηση

Δημοφιλείς Ημέρες

Συχνή συμμετοχή στην ερώτηση

Δημοφιλή Μηνύματα

Σαφώς και στο συγκεκριμένο πρόβλημα και αν θέλει να κάνει μόνο αυτό το πράγμα δεν υπάρχει πρόβλημα. Καλό όμως είναι να βλέπουμε λίγο γενικότερα το πως γράφουμε κώδικα και ώστε να μπορούμε να τον χρησ

Παιδιά ήρεμα μια ερώτησε έκανε το παιδί για το πως τρέχει ο κώδικας και όχι ματς WWE. Καλό είναι να σπαστεί το θέμα γιατί βλέπω το άτομο με πολλά ερωτηματικά αντί μιας σαφούς απάντησης.

Θα διαφωνήσω εδώ. Δεν είναι καλό να κάνεις exit μέσα από μια συνάρτηση που χρησιμοποιείς για έλεγχο ή αναζήτηση κτλ. Μπορεί απλά άν δεν βρίσκει το στοιχείο μέσα στον πίνακα να επιστρέφει -1 και να κά

Προτεινόμενες αναρτήσεις

  • 0

Αν κατάλαβα καλά θες να συγκρίνει το πρόγραμμα τα στοιχεία του πίνακα με την ακέραια τιμή της μεταβλητής thesi.

 

Κάποιες αλλαγές στο κώδικα που πόσταρες.

 

 

#include <stdio.h>
#include <stdlib.h>
 
int thesi_Stoixeiou(int pin[],int s)
{
    int count=0;
    int p;
    for(p=0; p<5; p++)
    {
        if(*(pin+p)==s)
         {
           printf("Thesi Stoixeiou %d \n",p);
         }
 
    }
 
}
int main()
{
    int nums[5];
    int num, i;
    int thesi=0;
    printf("Eisodos pente Stoixeiwn:\n");
 
     for(i=0; i<5; i++)
     {
         scanf("%d",&nums[i]);
     }
 
 
    thesi_Stoixeiou(nums,thesi);
 
 
    system("pause");
    return 0;
}
Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Καλυτερα να ορίσεις μια οδηγια προεπεξεργαστή για τα στοιχεια ενος πινακα. Διοτι αν θελησεις να αλλαξεις τον αριθμο 5 καποια στιγμη θα πρεπει να τον αλλαξεις σε ολα τα σημεια που εμφανιζεται στην προκειμενη σε 3 (2 οι βροχοι και ενας στην δηλωση). Αυτα για λογους καλύτερης συντήρησης ενος προγράμματος.

 

Στο μεταξυ vinso η συναρτηση σου δεν επιστρέφει κάτι. Ενω την έχεις δηλώσει να το κανει.

 
#define LEN 5
 
// EΔΩ Η main()
 
// ΜΕΣΑ στο σωμα της συνάρτησης ευρεση θέσης στοιχειου
for(i=0; i<LEN; i++){
 if( array[i] == element )
         return i;
}
printf("There is no such element\n");
return 0;

 
Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Έχεις καταλάβει τι κάνει η συνάρτησή σου και τι κάνει έτσι όπως την καλείς;

 

Στην main() ζητάς να δώσει ο χρήστης 5 στοιχεια που τα βάζεις στον πίνακα nums και μετά ψάχνεις να βρείς εκεί μέσα που υπάρχει το στοιχείο thesi (που είναι ο αριθμός μηδεν).

 

Αυτό είναι που θέλεις να κάνεις;

 

edit: Η συνάρτησή σου δουλεύει αν το thesι έχει κάποια τιμή που υπάρχει μέσα στα στοιχεία που δινει ο χρηστης στην main. (Απλά πρέπει να βάλεις και τι θα επιστρέφει στην περίπτωση που δεν το βρίσκει το στοιχείο που ψάχνεις)

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Θέλω να τυπώνει τη θέση του στοιχείου ως εξής:

π.χ. δίνω τις τιμές :5, 5, 6, 1, 2

 

και αν επιλέξω την 5, να εκτυπώνεται ότι βρέθηκε η τιμή 5 στην θέση [0] του πίνακα nums.

Βέβαια, το 5 εμφανίζεται 2 φόρες και καλό θα ήταν να εμφάνιζε και τη θέση [1], αλλά τέλοςπαντων ας τυπώνει την πρώτη θέση στην οποία συναντάμε τον αριθμό(εφόσον αυτός επαναλαμβάνεται).

 

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Ωραια. Αυτο που σου έδωσα εγω πριν ειναι. Δεν καλυπτει ομως την περιπτωση που κατι εμφανιζεται 2 φορες οπως εγραψες μετά.


#include<stdio.h>
#include<stdlib.h>
#define LEN 5
int arr_pos(int arr[LEN] , int elem);
 
int main(void)
{
   int arr[LEN]={0};
 
   int i=0 , elem;
 
   printf("Give 5 elements: ");
 
   for(; i<LEN; i++)
   scanf("%d" , &arr[i]);
 
   printf("Give the element: \n");
   scanf("%d" , &elem);
 
   printf("Position of %d is %d " , elem , arr_pos(arr,elem) );
 
   return 0;
}
int arr_pos(int arr[LEN] , int elem)
{
 
    int i;
 
    for(i=0; i<LEN; i++)
        if( arr[i] == elem) return i;
 
    printf("There is no such element");
    exit(0);
 
}
Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Ωραια. Αυτο που σου έδωσα εγω πριν ειναι. Δεν καλυπτει ομως την περιπτωση που κατι εμφανιζεται 2 φορες οπως εγραψες μετά.

Το είδα, ευχαριστώ. Δεν μου τρέχει σωστά, μου βγάζει τις θέσεις αλλα αντ' αλλων.

Κάπου κάνω λάθος στη μεταβλητή που επιστρεφει το αποτελεσμα.

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Θέλω να τυπώνει τη θέση του στοιχείου ως εξής:

π.χ. δίνω τις τιμές :5, 5, 6, 1, 2

 

και αν επιλέξω την 5, να εκτυπώνεται ότι βρέθηκε η τιμή 5 στην θέση [0] του πίνακα nums.

Βέβαια, το 5 εμφανίζεται 2 φόρες και καλό θα ήταν να εμφάνιζε και τη θέση [1], αλλά τέλοςπαντων ας τυπώνει την πρώτη θέση στην οποία συναντάμε τον αριθμό(εφόσον αυτός επαναλαμβάνεται).

Στην main πως λες στο πρόγραμμα να ψάξει για τον αριθμό 5; Του λες να ψάξει για τον αριθμό thesi μέσα που αυτό έχει τιμή μηδέν. Στην ουσία ψάχνει η το πρόγραμμά σου για το που βρίσκεται το 0 πάντα.

Αν καλεσεις την συνάρτηση σου σαν

printf("To stoixeio brethike sth thesi %d\n",thesi_Stoixeiou(nums,5));
ή
...

thesi =5;

printf("To stoixeio brethike sth thesi %d\n",thesi_Stoixeiou(nums,thesi));
...

Θα σου επιστρέψει σωστό αποτέλεσμα...

Χρειάζονται βελιτώσεις κτλ όπως σου είπε κι ο star αλλά αυτό το βλέπεις και μόνος σου μετα΄...

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Για να κρατάς όλες τις θέσεις θες ένα Data Structure που να κρατά τον Αριθμό και τις θέσεις. Μια καλή λύση είναι να αποθηκεύεις τις θέσεις σε μια Λίστα που θα διαθέτει και ένα μετρητή όταν προσθαίτεις ένα στοιχείο σε αυτήν θα αυξάνεται ο Μετρητής όταν αφαιρείς θα μειώνεται.

 

Έτσι θα κρατάς τις θέσεις των στοιχείων για μια τιμή συν το μήκος. Αν δεν βρεθεί τίποτα σημαίνει ότι θα έχεις μια άδεια λίστα. Άρα το μόνο που μένει είναι να ελέγχεις το μήκος τις λίστας. Εφόσον έχει στοιχεία τυπώνεις την λίστα.

 

Την λίστα μπορείς να την κάνεις με χρήστη struct και για ευκολία στο όνομα μέσω ενός typedef.

 

Ακόμη για καλύτερο έλεγχο της function μπορείς να του λες να ψάξει και για ένα στοιχείο το δίνει ο χρήστης είτε σαν παράμετρο ;) είτε μέσω scanf.

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Το είδα, ευχαριστώ. Δεν μου τρέχει σωστά, μου βγάζει τις θέσεις αλλα αντ' αλλων.

Κάπου κάνω λάθος στη μεταβλητή που επιστρεφει το αποτελεσμα.

 

Eκανα edit με προχειρο κώδικα. Δουλευει σωστα μονο αν δωσεις 5 στοιχεια ακριβως. 

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

#include <stdio.h>
#include <stdlib.h>

int thesi_Stoixeiou(int pin[],int s)
{
    int count=0;
    int p=0;
    for(; p<5; p++)
         if(*(pin+p)==s)
         return p;

    printf("Den yparxei tetoia timi ston pinaka");
    return 0;
}
int main()
{
    int nums[5];                              
    int num, i;
    int thesi=0;
    printf("Eisodos pente Stoixeiwn:\n");
     for(i=0; i<5; i++)
      scanf("%d",nums+i);

    printf("Poio stoixeio epithymeite na anixneytei?:\n");
    scanf("%d",&num);
  
    printf("To stoixeio brethike sth thesi %d\n",thesi_Stoixeiou(nums,thesi));
    system("pause");
    return 0;
}
 

Έτσι το "τρέχω", αλλά δεν βγάζει τη θέση, ούτε λειτουργεί ο έλεγχος if στη συνάρτηση

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Διαβάζεις το στοιχείο στο num και βάζεις στη συνάρτηση την μεταβλητη thesi

 

κάνε

 printf("To stoixeio brethike sth thesi %d\n",thesi_Stoixeiou(nums,num));
Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

 

Διαβάζεις το στοιχείο στο num και βάζεις στη συνάρτηση την μεταβλητη thesi

 

κάνε

 printf("To stoixeio brethike sth thesi %d\n",thesi_Stoixeiou(nums,num));

Έχεις δίκο, έκανα copy-paste από ενα πρόχειρο notepad, στο οποίο περνούσα τον κώδικα και μάλλον επικόλλησα λάθος μεταβλητή.

Ευχαριστώ πολύ.

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

λεκτικος ο κωδικας που εδωσα ειναι προχειροδουλειά αλλα για την ασκηση που τον θες ειναι ενταξει. Δηλαδη αμα ο χρηστης δωσει παραπανω αριθμους υπάρχει θεμα με το προγραμμα παρολαυτα με το return 0 αν ο χρηστης δωσει ενα στοιχειο που δεν υπαρχει θα του εμφανισει οτι ο ταδε αριθμος ειναι στην θέση 0 ακριβως επειδη η συναρτηση επιστρέφει 0 σε καθε αλλη περιπτωση (αν δηλαδη ο αριθμος δεν υπάρχει) καλυτερα χρησιμοποιησε την exit(0) να τερματιζεις επιτοπου το προγραμμα και προσθεσε και το #include <stdlib.h>

 
#include<stdio.h>
#include<stdlib.h>
#define LEN 5
int arr_pos(int arr[LEN] , int elem);
 
int main(void)
{
   int arr[LEN]={0};
 
   int i=0 , elem;
 
   printf("Give the element: \n");  
   scanf("%d" , &elem);
 
   printf("Give 5 elements: ");
 
   for(; i<LEN; i++)
   scanf("%d" , &arr[i]);
 
   printf("Position of %d is %d " , elem , arr_pos(arr,elem) );
 
   return 0;
}
int arr_pos(int arr[LEN] , int elem)
{
 
    int i;
 
    for(i=0; i<LEN; i++)
        if( arr[i] == elem) return i;
 
    printf("There is no such element");
    exit(0);
 
}

FIXED.

 

Aπλα διαβαζα τον αριθμο κατω απο το διαβασμα των στοιχειων του πινακα και αμα υπήρχε ενα μεγαλυτερο πηγαινε σαν εισοδο στην επομενη scanf.

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

λεκτικος ο κωδικας που εδωσα ειναι προχειροδουλειά αλλα για την ασκηση που τον θες ειναι ενταξει. Δηλαδη αμα ο χρηστης δωσει παραπανω αριθμους υπάρχει θεμα με το προγραμμα παρολαυτα με το return 0 αν ο χρηστης δωσει ενα στοιχειο που δεν υπαρχει θα του εμφανισει οτι ο ταδε αριθμος ειναι στην θέση 0 ακριβως επειδη η συναρτηση επιστρέφει 0 σε καθε αλλη περιπτωση (αν δηλαδη ο αριθμος δεν υπάρχει) καλυτερα χρησιμοποιησε την exit(0) να τερματιζεις επιτοπου το προγραμμα και προσθεσε και το #include <stdlib.h>

 

Θα διαφωνήσω εδώ. Δεν είναι καλό να κάνεις exit μέσα από μια συνάρτηση που χρησιμοποιείς για έλεγχο ή αναζήτηση κτλ.

Μπορεί απλά άν δεν βρίσκει το στοιχείο μέσα στον πίνακα να επιστρέφει -1 και να κάνει τον έλεγχο στην main όπου αν η τιμή που επιστρέφει η συνάρτηση είναι αρνητική να βγάζει κάποιο μήνυμα ενώ αν εχει βρει τη θέση να την τυπώνει...

  • Like 1
Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

λεκτικος ο κωδικας που εδωσα ειναι προχειροδουλειά αλλα για την ασκηση που τον θες ειναι ενταξει. Δηλαδη αμα ο χρηστης δωσει παραπανω αριθμους υπάρχει θεμα με το προγραμμα παρολαυτα με το return 0 αν ο χρηστης δωσει ενα στοιχειο που δεν υπαρχει θα του εμφανισει οτι ο ταδε αριθμος ειναι στην θέση 0 ακριβως επειδη η συναρτηση επιστρέφει 0 σε καθε αλλη περιπτωση (αν δηλαδη ο αριθμος δεν υπάρχει) καλυτερα χρησιμοποιησε την exit(0) να τερματιζεις επιτοπου το προγραμμα και προσθεσε και το #include <stdlib.h>

 
#include<stdio.h>
#include<stdlib.h>
#define LEN 5
int arr_pos(int arr[LEN] , int elem);
 
int main(void)
{
   int arr[LEN]={0};
 
   int i=0 , elem;
 
   printf("Give the element: \n");  
   scanf("%d" , &elem);
 
   printf("Give 5 elements: ");
 
   for(; i<LEN; i++)
   scanf("%d" , &arr[i]);
 
   printf("Position of %d is %d " , elem , arr_pos(arr,elem) );
 
   return 0;
}
int arr_pos(int arr[LEN] , int elem)
{
 
    int i;
 
    for(i=0; i<LEN; i++)
        if( arr[i] == elem) return i;
 
    printf("There is no such element");
    exit(0);
 
}

FIXED.

Ευχαριστώ πολύ Star_Light, θα το αλλάξω σε exit(0), διότι πράγματι, τυπώνει το μήνυμα που είπες κι όταν δοθεί ένα στοιχείο που δεν υπάρχει μέσα στον πίνακα.

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Εγγραφείτε για έναν νέο λογαριασμό

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

  • Δημιουργία νέου...

Με την περιήγησή σας στο insomnia.gr, αποδέχεστε τη χρήση cookies που ενισχύουν σημαντικά την εμπειρία χρήσης.