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

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

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


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


Μέλος από: 27 Δεκ 2008
Μηνύματα: 13

View users profile
ΜήνυμαΣτις: 18 Ιαν 2009 20:19    Θέμα: C μέγιστοι ενός πίνακα
Περιγραφή θέματος: εμφάνιση θέσης μέγιστου στοιχείου πίνακα
Απάντηση με παράθεση  Mark this post and the followings unread

έχω το πρόγραμμα που εμφανίζει τη θέση του πίνακα με το μέγιστο στοιχείου.μέχρι εδώ καλά.αν όμως θέλω να εμφανίσω όλες τις θέσεις με το μέγιστο (αν υπάρχουν άλλες) τι κάνω;πχ στο παρακάτω πρόγραμμα το μέγιστο 9 βρίσκεται σε 3 θέσεις(3,5,9).
ποιά είναι η καλύτερη λύση;το να δηλώσω το pos σαν πίνακα και να τον γεμίζω με τις θέσεις είναι μια λύση.καμιά ιδέα;δε μπορεί να μην υπάρχει κάτι πιο έξυπνο
κώδικας:
#include<stdio.h>
main()
{
    int array[10]={4,5,6,9,8,9,4,1,2,9};
    int max,pos;


    max=array[0];

    for(int i=1;i<10;i++)
        if(array[i]>max)
        {
        max=array[i];
        pos=i;
        }
   printf("position:%d",pos);
}
nif


Μέλος από: 27 Δεκ 2008
Μηνύματα: 13

View users profile
ΜήνυμαΣτις: 18 Ιαν 2009 21:58    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

τελικά έκανα αυτό
κώδικας:
#include<stdio.h>
main()
{
    int array[10]={4,5,6,9,8,9,4,1,2,9};
    int max;


    max=array[0];

    for(int i=1;i<10;i++)
        if(array[i]>max)
            max=array[i];


    for(int j=0;j<10;j++)
    if (array[j]==max)
    printf("\nposition:%d",j);
}


καμιά ιδέα για κάτι καλύτερο;
unreal


Μέλος από: 04 Ιουν 2004
Μηνύματα: 49
Περιοχή: Inside My Brain!
View users profile
ΜήνυμαΣτις: 19 Ιαν 2009 19:57    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

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

_________________
Do not enter: http://www.georgebekiaris.com
virxen75


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

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

δες τον κώδικα που σου στέλνω.



TEST4.rar
 Description:

Download
 Filename:  TEST4.rar
 Filesize:  521 Bytes
 Downloaded:  310 Time(s)

ianni


Μέλος από: 11 Απρ 2006
Μηνύματα: 8
Περιοχή: rodos
View users profile Send email to user
ΜήνυμαΣτις: 01 Απρ 2009 01:30    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

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


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

ianni

μήπως ψάνεις αυτό?
κώδικας:

#include<stdio.h>
void main()
{
    int array[10]={4,5,6,9,8,9,4,1,2,9};
    int temp=0;

     for(int i=0;i<10;i++)
            for (int j=0;j<10;j++)
             if(array[j]<array[i]) {
                    temp=array[i];
                    array[i]=array[j];
                    array[j]=temp;
             }

    printf("\nPinakas apo max se min \n");
    for(int k=0;k<10;k++)
          printf("%d ",array[k]);
}
ianni


Μέλος από: 11 Απρ 2006
Μηνύματα: 8
Περιοχή: rodos
View users profile Send email to user
ΜήνυμαΣτις: 01 Απρ 2009 01:54    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

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


Μέλος από: 11 Απρ 2006
Μηνύματα: 8
Περιοχή: rodos
View users profile Send email to user
ΜήνυμαΣτις: 01 Απρ 2009 11:56    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

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




κώδικας:
#include <stdio.h>
#include <stdlib.h>

struct Data
{
  char age[20];
  char name[20];
 
};


void readData(struct Data *ptr)
{
    int i;
   
    for(i = 0; i <= 2; i++)
    {
        printf("Enter name:\n");
        gets((ptr+i)->name);
       
        printf("Enter age:\n"); //tin imerominia se etos px 1998
        gets((ptr+i)->age);
   }   
}

int main()
{
    int i;
    struct Data *ptr1;
   
    readData(ptr1);
}


1)Θελω να ταξινομησω τον πινακα age με τις μεγαλυτερες ημερομηνιες
2)Θελω να ταξινομησω τον πινακα names με βαση τα ονοματα των ανθρωπων που ειναι μεγαλυτεροι σε ηλικια.Ευκολο ειναι απλα κατι κανω λαθος στον αλγοριθμο ταξινομησης οταν του βαζω strings
virxen75


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

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
{
  char age[20];
  char name[20];

};
 typedef struct data Data;


void readData(Data *ptr){
    printf("\n");
    for(int i = 0; i <N; i++)
    {
   printf("Enter name(%d):",(i+1));
   gets((ptr+i)->name);

   printf("Enter age(%d):",(i+1)); //tin imerominia se etos px 1998
   gets((ptr+i)->age);
   }
}

void main()
{
    Data *ptr1;
    readData(ptr1);
    Data temp[1];
for(int i=0;i<N;i++)
    for (int j=0;j<N;j++)
   if(atoi(ptr1[j].age)<atoi(ptr1[i].age)) {
      temp[0]=ptr1[i];
   ptr1[i]=ptr1[j];
   ptr1[j]=temp[0];
       }

      printf("\ntaksinomish me bash to pedio age apo max se min");
      for (j=0;j<N;j++)
   printf("\nage=%s , name=%s",ptr1[j].age,ptr1[j].name);

for(i=0;i<N;i++)
      for (j=0;j<N;j++)
   if(strcmp(ptr1[j].name,ptr1[i].name)<0) {
      temp[0]=ptr1[i];
      ptr1[i]=ptr1[j];
      ptr1[j]=temp[0];
   }

      printf("\ntaksinomish me bash to pedio name apo max se min");
      for (j=0;j<N;j++)
   printf("\nname=%s , age=%s",ptr1[j].name,ptr1[j].age);
}
ianni


Μέλος από: 11 Απρ 2006
Μηνύματα: 8
Περιοχή: rodos
View users profile Send email to user
ΜήνυμαΣτις: 01 Απρ 2009 20:02    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

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


Μέλος από: 18 Αυγ 2008
Μηνύματα: 53

View users profile
ΜήνυμαΣτις: 02 Απρ 2009 00:13    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

virxen75 ανέφερε:

κώδικας:

void readData(Data *ptr){
    printf("\n");
    for(int i = 0; i <N; i++)
    {
   printf("Enter name(%d):",(i+1));
   gets((ptr+i)->name);

   printf("Enter age(%d):",(i+1)); //tin imerominia se etos px 1998
   gets((ptr+i)->age);
   }
}

void main()
{
    Data *ptr1;
    readData(ptr1);


έχει γίνει κάπου initialize το ptr; Δείχνει σε "νόμιμη" μνήμη;
Έχεις δηλώσεις C και C++. Δεν ξέρω αν αυτό το ήθελες πράγματι.
virxen75


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

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)
Εμφάνιση Μηνυμάτων:   
Εισαγωγή νέου Θέματος   Απάντηση στο Θέμα Σελίδα 1 από 1 [12 Μηνύματα] Mark the topic unread :: Προηγούμενο θέμα :: Επόμενο θέμα
 Forum index » Δημιουργία Web Sites, Γραφικών & Προγραμματισμός » Γλώσσες Προγραμματισμού » C, C++
Τώρα είναι 09 Δεκ 2016 05:47 | 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