C μέγιστοι ενός πίνακα

Συζητήσεις για την γλώσσα C και C++

Συντονιστές: Super-Moderators, WebDev Moderators

Απάντηση
Άβαταρ μέλους
nif
Δημοσιεύσεις: 13
Εγγραφή: 27 Δεκ 2008 19:28

C μέγιστοι ενός πίνακα

Δημοσίευση από nif » 18 Ιαν 2009 20:19

έχω το πρόγραμμα που εμφανίζει τη θέση του πίνακα με το μέγιστο στοιχείου.μέχρι εδώ καλά.αν όμως θέλω να εμφανίσω όλες τις θέσεις με το μέγιστο (αν υπάρχουν άλλες) τι κάνω;πχ στο παρακάτω πρόγραμμα το μέγιστο 9 βρίσκεται σε 3 θέσεις(3,5,9).
ποιά είναι η καλύτερη λύση;το να δηλώσω το pos σαν πίνακα και να τον γεμίζω με τις θέσεις είναι μια λύση.καμιά ιδέα;δε μπορεί να μην υπάρχει κάτι πιο έξυπνο

Κώδικας: Επιλογή όλων

#include<stdio.h>
main&#40;&#41;
&#123;
    int array&#91;10&#93;=&#123;4,5,6,9,8,9,4,1,2,9&#125;;
    int max,pos;


    max=array&#91;0&#93;;

    for&#40;int i=1;i<10;i++&#41;
        if&#40;array&#91;i&#93;>max&#41;
        &#123;
        max=array&#91;i&#93;;
        pos=i;
        &#125;
   printf&#40;"position&#58;%d",pos&#41;;
&#125;

Άβαταρ μέλους
nif
Δημοσιεύσεις: 13
Εγγραφή: 27 Δεκ 2008 19:28

C μέγιστοι ενός πίνακα

Δημοσίευση από nif » 18 Ιαν 2009 21:58

τελικά έκανα αυτό

Κώδικας: Επιλογή όλων

#include<stdio.h>
main&#40;&#41;
&#123;
    int array&#91;10&#93;=&#123;4,5,6,9,8,9,4,1,2,9&#125;;
    int max;


    max=array&#91;0&#93;;

    for&#40;int i=1;i<10;i++&#41;
        if&#40;array&#91;i&#93;>max&#41;
            max=array&#91;i&#93;;


    for&#40;int j=0;j<10;j++&#41;
    if &#40;array&#91;j&#93;==max&#41;
    printf&#40;"\nposition&#58;%d",j&#41;;
&#125;
καμιά ιδέα για κάτι καλύτερο;

Άβαταρ μέλους
unreal
Δημοσιεύσεις: 49
Εγγραφή: 04 Ιουν 2004 16:12
Τοποθεσία: Inside My Brain!

C μέγιστοι ενός πίνακα

Δημοσίευση από unreal » 19 Ιαν 2009 19:57

το πρωτο ειναι faster αν εχεις ενα μεγιστο.. αλλιως το 2ο.. τωρα αν θες optimize σε τόσο μικρό πινακα δεν αξιζει..

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

C μέγιστοι ενός πίνακα

Δημοσίευση από virxen75 » 28 Μαρ 2009 17:12

εγώ πάντως θα το έκανα με δυναμικούς πίνακες με δείκτες

δες τον κώδικα που σου στέλνω.
Συνημμένα
TEST4.rar
(521 Ψηφιολέξεις) Μεταφορτώθηκε 319 φορές

ianni
Δημοσιεύσεις: 8
Εγγραφή: 12 Απρ 2006 00:38
Τοποθεσία: rodos

C μέγιστοι ενός πίνακα

Δημοσίευση από ianni » 01 Απρ 2009 02:30

Θα μ ενδιεφερε κ εμενα μια λυση σ αυτο το προβλημα.Θα ηθελα να εμφανισω τον πινακα του φιλου με τα στοιχει ταξινομημενα απο το μεγαλυτερο στο μικροτερο.Η λυση με τους δεικτες ειναι αρκετα προχωρημενη για μενα,αν εχει καποιος κατι απλουστερο θα βοηθουσε

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

C μέγιστοι ενός πίνακα

Δημοσίευση από virxen75 » 01 Απρ 2009 02:46

ianni

μήπως ψάνεις αυτό?

Κώδικας: Επιλογή όλων

#include<stdio.h>
void main&#40;&#41;
&#123;
    int array&#91;10&#93;=&#123;4,5,6,9,8,9,4,1,2,9&#125;;
    int temp=0;

     for&#40;int i=0;i<10;i++&#41;
            for &#40;int j=0;j<10;j++&#41;
	          if&#40;array&#91;j&#93;<array&#91;i&#93;&#41; &#123;
	                 temp=array&#91;i&#93;;
	                 array&#91;i&#93;=array&#91;j&#93;;
	                 array&#91;j&#93;=temp;
	          &#125;

    printf&#40;"\nPinakas apo max se min \n"&#41;;
    for&#40;int k=0;k<10;k++&#41;
	       printf&#40;"%d ",array&#91;k&#93;&#41;;
&#125;

ianni
Δημοσιεύσεις: 8
Εγγραφή: 12 Απρ 2006 00:38
Τοποθεσία: rodos

C μέγιστοι ενός πίνακα

Δημοσίευση από ianni » 01 Απρ 2009 02:54

Mπραβο ρε φιλε virxen75,ποιο κατανοητο δεν γινοταν,να σαι καλα

ianni
Δημοσιεύσεις: 8
Εγγραφή: 12 Απρ 2006 00:38
Τοποθεσία: rodos

C μέγιστοι ενός πίνακα

Δημοσίευση από ianni » 01 Απρ 2009 12:56

Φιλε virxen75 καλημερα.Θα θελα να ρωτησω το εξης,καταφερα μια χαρα να εμφανισω τους μεγαλυτερους αριθμους με την μεθοδο ταξινομησης που μας προτεινες θα θελα να μας πεις αν ισχυει το ιδιο οταν θα χρειαστει να ταξινομησω εναν πινακα με strings.Δινω ενα παραδειγμα.



Κώδικας: Επιλογή όλων

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

struct Data
&#123;
  char age&#91;20&#93;;
  char name&#91;20&#93;;
 
&#125;;


void readData&#40;struct Data *ptr&#41;
&#123;
    int i;
    
    for&#40;i = 0; i <= 2; i++&#41;
    &#123;
        printf&#40;"Enter name&#58;\n"&#41;;
        gets&#40;&#40;ptr+i&#41;->name&#41;;
        
        printf&#40;"Enter age&#58;\n"&#41;; //tin imerominia se etos px 1998
        gets&#40;&#40;ptr+i&#41;->age&#41;;
   &#125;    
&#125;

int main&#40;&#41;
&#123;
    int i;
    struct Data *ptr1;
   
    readData&#40;ptr1&#41;;
&#125;
1)Θελω να ταξινομησω τον πινακα age με τις μεγαλυτερες ημερομηνιες
2)Θελω να ταξινομησω τον πινακα names με βαση τα ονοματα των ανθρωπων που ειναι μεγαλυτεροι σε ηλικια.Ευκολο ειναι απλα κατι κανω λαθος στον αλγοριθμο ταξινομησης οταν του βαζω strings

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

C μέγιστοι ενός πίνακα

Δημοσίευση από virxen75 » 01 Απρ 2009 18:35

1) δεν έχεις πίνακα string απλά αλλά δομή δεδομένων στο παράδειγμα που δίνεις
2)στα strings όταν έχεις να κάνεις με συγκρίσεις για ταξινόμηση π.χ. πρέπει να προσέξεις
ότι π.χ. στο age ότι 5<123 άλλα "5">"123" επομένως αν έχεις αριθμητική τιμή σε πίνακα
string πρέπει να τον μετατρέψεις πρώτα σε αριθμητική τιμή και μετά να κάνεις την σύγκριση
π.χ. atoi("5")=5 --->AsciiTOInteger
ισχύει για ακέραιους μόνο.Έτσι αν βάλεις π.χ. age>32768 νομίζω που τελειώνουν
οι ακέραιοι θα πάρεις λάθος αποτελέσματα
3)η πιο πάνω μετατροπή προυποθέτει ελέγχους π.χ. αν πρόκειται όντως για αριθμό
4)όταν συγκρίνεις string το κάνεις με το strcmp(stringA,stringB)< ,=,> 0
5)ο κώδικας που σου στέλνω υλοποιεί τις πιο πάνω περιπτώσεις
α)μία φορά για το πεδίο age
β)και μία φορά για το πεδίο name

ελπίζω να είναι κατανοητό.

Κώδικας: Επιλογή όλων

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const int N=4;
struct data
&#123;
  char age&#91;20&#93;;
  char name&#91;20&#93;;

&#125;;
 typedef struct data Data;


void readData&#40;Data *ptr&#41;&#123;
    printf&#40;"\n"&#41;;
    for&#40;int i = 0; i <N; i++&#41;
    &#123;
	printf&#40;"Enter name&#40;%d&#41;&#58;",&#40;i+1&#41;&#41;;
	gets&#40;&#40;ptr+i&#41;->name&#41;;

	printf&#40;"Enter age&#40;%d&#41;&#58;",&#40;i+1&#41;&#41;; //tin imerominia se etos px 1998
	gets&#40;&#40;ptr+i&#41;->age&#41;;
   &#125;
&#125;

void main&#40;&#41;
&#123;
    Data *ptr1;
    readData&#40;ptr1&#41;;
    Data temp&#91;1&#93;;
for&#40;int i=0;i<N;i++&#41;
    for &#40;int j=0;j<N;j++&#41;
	if&#40;atoi&#40;ptr1&#91;j&#93;.age&#41;<atoi&#40;ptr1&#91;i&#93;.age&#41;&#41; &#123;
		temp&#91;0&#93;=ptr1&#91;i&#93;;
	ptr1&#91;i&#93;=ptr1&#91;j&#93;;
	ptr1&#91;j&#93;=temp&#91;0&#93;;
       &#125;

      printf&#40;"\ntaksinomish me bash to pedio age apo max se min"&#41;;
      for &#40;j=0;j<N;j++&#41;
	printf&#40;"\nage=%s , name=%s",ptr1&#91;j&#93;.age,ptr1&#91;j&#93;.name&#41;;

for&#40;i=0;i<N;i++&#41;
      for &#40;j=0;j<N;j++&#41;
	if&#40;strcmp&#40;ptr1&#91;j&#93;.name,ptr1&#91;i&#93;.name&#41;<0&#41; &#123;
		temp&#91;0&#93;=ptr1&#91;i&#93;;
		ptr1&#91;i&#93;=ptr1&#91;j&#93;;
		ptr1&#91;j&#93;=temp&#91;0&#93;;
	&#125;

      printf&#40;"\ntaksinomish me bash to pedio name apo max se min"&#41;;
      for &#40;j=0;j<N;j++&#41;
	printf&#40;"\nname=%s , age=%s",ptr1&#91;j&#93;.name,ptr1&#91;j&#93;.age&#41;;
&#125;

ianni
Δημοσιεύσεις: 8
Εγγραφή: 12 Απρ 2006 00:38
Τοποθεσία: rodos

C μέγιστοι ενός πίνακα

Δημοσίευση από ianni » 01 Απρ 2009 21:02

Να σαι καλα φιλε μου για τον κοπο σου,θα το μελετησω το παραδειγμα.Thanks

Άβαταρ μέλους
bxenos
Δημοσιεύσεις: 53
Εγγραφή: 18 Αύγ 2008 19:56

C μέγιστοι ενός πίνακα

Δημοσίευση από bxenos » 02 Απρ 2009 01:13

virxen75 έγραψε:

Κώδικας: Επιλογή όλων

void readData&#40;Data *ptr&#41;&#123;
    printf&#40;"\n"&#41;;
    for&#40;int i = 0; i <N; i++&#41;
    &#123;
	printf&#40;"Enter name&#40;%d&#41;&#58;",&#40;i+1&#41;&#41;;
	gets&#40;&#40;ptr+i&#41;->name&#41;;

	printf&#40;"Enter age&#40;%d&#41;&#58;",&#40;i+1&#41;&#41;; //tin imerominia se etos px 1998
	gets&#40;&#40;ptr+i&#41;->age&#41;;
   &#125;
&#125;

void main&#40;&#41;
&#123;
    Data *ptr1;
    readData&#40;ptr1&#41;;
έχει γίνει κάπου initialize το ptr; Δείχνει σε "νόμιμη" μνήμη;
Έχεις δηλώσεις C και C++. Δεν ξέρω αν αυτό το ήθελες πράγματι.

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

C μέγιστοι ενός πίνακα

Δημοσίευση από virxen75 » 02 Απρ 2009 02:56

bxenos γεια σου,

η απάντηση μου στις επισημάνσεις-ερωτήσεις σου είναι

1)δηλώσεις C,C++
===================================================
Απλά έδειξα πάνω στον κώδικα του ianni την λογική του bubblesort σε πίνακες
String.(Δεν μου είπε αν το ήθελε σε C ή C++)

2)"νόμιμη μνήμη"
===================================
μάλλον αναφέρεσε στο realloc:
ptr =(Data *) realloc(ptr, (i+1)*sizeof(Data));
if (ptr==NULL){
printf("\nError allocating memory");exit(1);
}
Απ. ομοίως με το 1)

Απάντηση

Επιστροφή στο “C, C++”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες