πρόγραμμα c το οποίο να διαβάζει μια ακολουθία...

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

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

Απάντηση
geotheod
Δημοσιεύσεις: 54
Εγγραφή: 19 Απρ 2005 13:12
Τοποθεσία: Αθήνα
Επικοινωνία:

πρόγραμμα c το οποίο να διαβάζει μια ακολουθία...

Δημοσίευση από geotheod » 25 Μάιος 2005 00:29

Παιδια αν καποιος γνωριζει πως λυνεται το παρακατω προγραμμα θα με εσωνε... Μας το εβαλαν ασκηση και οσο κι αν προσπαθω δεν μου βγαινει!

Γράψετε πρόγραμμα C το οποίο να διαβάζει μια ακολουθία από Ν τυχαίους ακέραιους αριθμούς όπου Ν σταθερά. Το πρόγραμμα σας να βρίσκει και να εκτυπώνει τους αριθμούς από μια φορά τον καθένα. Δηλαδή να μην εκτυπώνει τις επαναλήψεις ενός αριθμού. Για παράδειγμα, για είσοδο 10 6 10 3 6 10 7 10 7 6 να δίνει έξοδο 10 6 3 7. Σημείωση: Να χρησιμοποιήσετε μόνο μονοδιάστατους πίνακες.

Άβαταρ μέλους
greekbytes
WebDev Moderator
Δημοσιεύσεις: 2438
Εγγραφή: 15 Νοέμ 2002 15:42
Τοποθεσία: Αθήνα
Επικοινωνία:

πρόγραμμα c το οποίο να διαβάζει μια ακολουθία...

Δημοσίευση από greekbytes » 25 Μάιος 2005 02:11

Μία απλή σκέψη είναι η εξής:
Εισάγεις τα δεδομένα του πρώτου πίνακα (έστω arxikos ο πρώτος πίνακας) με μία επανάληψη για i από 1 μέχρι Ν.
Παράλληλα περνάς την πρώτη τιμή του πίνακα σε έναν άλλον δηλ. περνάς την τιμή arxikos[1] στον πίνακα telikos (telikos[1]) * και για κάθε τιμή που εισάγεις ελέγχεις αν υπάρχει στον πίνακα telikos και αν δεν υπάρχει την περνάς σ'αυτόν. Για αναζήτηση/εισαγωγή των στοιχείων στον telikos μπορείς να χρησιμοποιήσεις κάποια βοηθητική μεταβλητή σαν δείκτη. Πχ. θέτεις μία μεταβλητή A=2 και για κάθε στοιχείο που περνάς το Α αυξάνεται κατά 1 ώστε το επόμενο να μπεί στη θέση telikos[A+1].
Μετά με μία 2η επανάληψη for/while κλπ. τυπώνεις τα δεδομένα του telikos.

Άβαταρ μέλους
agrippas
Script Master
Δημοσιεύσεις: 494
Εγγραφή: 18 Ιούλ 2002 14:52
Τοποθεσία: Υπερπέραν
Επικοινωνία:

πρόγραμμα c το οποίο να διαβάζει μια ακολουθία...

Δημοσίευση από agrippas » 25 Μάιος 2005 05:18

Λύση 1.

Βασικά η λογική του greekbytes πιο αναλυτικά: Παίρνουμε το πρώτο νούμερο και το βάζουμε πρώτο στοιχείο σε ένα δεύτερο array:

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

array1 = {10, 6, 10, 3, 6, 10, 7, 10, 7, 6}
array2 = {10}
Τσεκάρουμε αν το δεύτερο νούμερο του array1 είναι μέσα στον array2. Αν όχι το χώνουμε στον array2 κι αυτό:

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

array1 = {10, 6, 10, 3, 6, 10, 7, 10, 7, 6}
array2 = {10, 6}
Τσεκάρουμε αν το τρίτο νούμερο του array1 είναι μέσα στον array2. Στην περίπτωσή μας είναι και δεν κάνουμε τίποτα.

Τσεκάρουμε αν το τέταρτο νούμερο του array1 είναι μέσα στον array2. Δεν είναι, άρα το χώνουμε μέσα:

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

array1 = {10, 6, 10, 3, 6, 10, 7, 10, 7, 6}
array2 = {10, 6, 3}
...

Όταν θα έχουμε τελειώσει με το τελευταίο νούμερο του array1, ο array2 θα είναι ο πίνακας που θέλουμε.

Όπως καταλαβαίνεις θα χρειαστείς μια while loop ή θα πρέπει να κάνεις τη διαδικασία αυτή αναδρομική (recursive).

Λύση 2.

Φτιάχνεις ένα vector από τον {10, 6, 10, 3, 6, 10, 7, 10, 7, 6} (παράδειγμα) στο οποίο θα βάλεις ΜΟΝΟ εκείνα που δεν υπάρχουν ήδη.

Η δεύτερη λύση είναι προτιμότερη από πλευράς ταχύτητας, αλλά δεν ξέρω αν τη δεχτεί. Εν πάση περιπτώσει επειδή δεν ξέρω C, σου την έφτιαξα σε Java για να δεις το σκεπτικό - μη δώσεις σημασία στα objects:

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

import java.util.LinkedList;
        
public class CheckNumbers {
    
   public static void main(String[] args){
      
       // logika esy ton array 8a ton kaneis input apo ton user

       int[] array1 = {10, 6, 10, 3, 6, 10, 7, 10, 7, 6};
       LinkedList list = new LinkedList();
       
       // vazoume to prwto stoixeio tou array1 sth list:
       list.addLast(new Integer(array1[0]));
        
       // tsekaroume an ta epomena stoixeia tou array1 einai sth list.
       for &#40;int j = 1; j < array1.length; j++&#41;&#123;
            // An oxi, ta xwnoume mesa&#58;
            if &#40;!list.contains&#40;new Integer&#40;array1&#91;j&#93;&#41;&#41;&#41;
                  list.add&#40;new Integer&#40;array1&#91;j&#93;&#41;&#41;;
       &#125;

       // output
       System.out.println&#40;list.toString&#40;&#41;&#41;;
    &#125;
&#125;
Το πρόγραμμα αυτό δίνει έξοδο [10, 6, 3, 7] και είναι ανεξάρτητο του μεγέθους του array.

Άβαταρ μέλους
berserk
Δημοσιεύσεις: 5
Εγγραφή: 14 Σεπ 2005 01:41
Τοποθεσία: Thessaloniki
Επικοινωνία:

πρόγραμμα c το οποίο να διαβάζει μια ακολουθία...

Δημοσίευση από berserk » 14 Σεπ 2005 19:00

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

#include <stdio.h>
#include <alloc.h>

#define MAX_ELEMENTS 40

int main&#40;int argc, char** argv&#41; &#123;
// Dinamiki desmeusi mnimis&#58;
int* array = &#40;int*&#41;malloc&#40;sizeof&#40;array&#41;&#41;;
// an uparxei problima me ton compiler xrisimopoihse&#58;
// int array&#91;MAX_ELEMENTS&#93;;
int marked = 0, length = 0, n = 0;

printf&#40;"Enter a sequence of numbers, separeted by space.\n"&#41;;
printf&#40;"Press '0' to invoke the duplicate-filtering process.\n"&#41;;
do &#123;
 scanf&#40;"%d",&array&#91;n&#93;&#41;;
&#125; while &#40; array&#91;n++&#93; != 0 &#41;;

length = n;

for &#40;int i=0; i<length; i++&#41; &#123;
 for &#40;int j=0; j<length; j++&#41; 
  if &#40; array&#91;j&#93; == array&#91;i&#93; && j!=i &#41;
   array&#91;i&#93; = marked;
&#125;

printf&#40;"\nfiltering duplicates and printing ouput...\n"&#41;;
for &#40;int loop=0; loop<length; loop++&#41;
  if &#40; array&#91;loop&#93; != marked &#41;
  	printf&#40;"%d ",array&#91;loop&#93;&#41;;	 

free&#40;array&#41;;
return 0;
&#125;
"Technology is dominated by two types of people: those who understand what they do not manage, and those who manage what they do not understand." Putt's Law

Άβαταρ μέλους
myle
Δημοσιεύσεις: 205
Εγγραφή: 18 Ιουν 2005 23:59
Τοποθεσία: Πάτρα
Επικοινωνία:

πρόγραμμα c το οποίο να διαβάζει μια ακολουθία...

Δημοσίευση από myle » 21 Οκτ 2005 11:48

Mipws gnorizete pos mporoume na dimiourgisoume synartisi h opoia na ypologizei thn tetragonikh riza xoris na kaloume bibliothiki?

(Signomi gia ta greeklish den mporo na grapso sta ellinika apo ton ypologisti pou eimai)
Εικόνα

Άβαταρ μέλους
soteres2002
S. & H. Moderator
Δημοσιεύσεις: 1524
Εγγραφή: 05 Μαρ 2004 22:17
Τοποθεσία: Ιωάννινα

πρόγραμμα c το οποίο να διαβάζει μια ακολουθία...

Δημοσίευση από soteres2002 » 21 Οκτ 2005 15:24

boreis to px b^(1/2) na to kaneis fragment se poliarithmous orous kai na tous prosteseis olous autous.

iparxei kai ena allo kolpaki me to opoio bnoreis na breis mia riza ipologizontas mia mathimatiki seira me enan brogxo.

kalitera omos na kaleis tin libmath apo to programma sou kai kata to compile time me ton gcc na dineis ksero go:

gcc -o some some.c -lmath

Απάντηση

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

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

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