Jump to content



πινακας σε c


απιστευτος

Recommended Posts

πως σε ενα μονοδιαστατο πινακα 30 στοιχειων στη c με αρχικες τιμες 1,3,5 μπορω να υπολογισω τους υπολοιπους 27 ξεροντας οτι ο καθε επομενος ειναι το αθροισμα ολων των προηγουμενων?δηλαδη ο επομενος του 5 ειναι το 9(1+3+5=9) το 18 και παει λεγοντας.εκτος απ τον πινακα εχω δηλωσει και αλλη μια μεταβλητη αλλα δε ξερω στην επαναληψη τι ακριβως τιμη θα της βαλω για να γινει η καταλληλη πραξη με τον πινακα.....

Link to comment
Share on other sites

Αρχική απάντηση από απιστευτος

πως σε ενα μονοδιαστατο πινακα 30 στοιχειων στη c με αρχικες τιμες 1,3,5 μπορω να υπολογισω τους υπολοιπους 27 ξεροντας οτι ο καθε επομενος ειναι το αθροισμα ολων των προηγουμενων?δηλαδη ο επομενος του 5 ειναι το 9(1+3+5=9) το 18 και παει λεγοντας.εκτος απ τον πινακα εχω δηλωσει και αλλη μια μεταβλητη αλλα δε ξερω στην επαναληψη τι ακριβως τιμη θα της βαλω για να γινει η καταλληλη πραξη με τον πινακα.....

απ οτι καταλαβα κανετε recursion.....

παρε ενα λινκ για διαβασμα

http://en.wikipedia.org/wiki/Recursion

λογο ωρας δεν μπορω να σκεφτω... αυριο μπορει αν την εχω κανει....

Link to comment
Share on other sites

Φίλε μου δε θυμάμαι καλά C, στα γράφω σε universal προγραμματισμό, κάνε μια μεταγλώττιση και είσαι έτοιμος, αν λόγω της ώρας έκανα λαθάκι σόρι, θα το κοιτάξω και το πρωί πάλι!

Ουσιαστικά προσθέτεις όλους τους προηγούμενους ελέγχοντας πότε τους έβαλες όλους. Μπορείς να το λύσεις και αλλιώς πολύ πιο εύκολα αλλά μπακάλικα. Αν παρατηρήσεις κάθε επόμενος είναι ο διπλάσιος του προηγούμενου. 9-18-36 κλπ... ’ρα βάζεις και στη θέση 4 το 9 και από εκεί και πέρα απλά λές ΠΙΝΑΚΑΣ(Ι)=ΠΙΝΑΚΑΣ(Ι-1)*2 και τέλος. Εγώ πάντως προτιμώ αυτό:

ΠΙΝΑΚΑΣ(1)=1

ΠΙΝΑΚΑΣ(2)=3

ΠΙΝΑΚΑΣ(3)=5

ΓΙΑ I=4 ΜΕΧΡΙ 30

J=I-1

ΟΣΟ J>0 ΕΠΑΝΑΛΑΒΕ

ΠΙΝΑΚΑΣ(Ι)=ΠΙΝΑΚΑΣ(Ι)+ΠΙΝΑΚΑΣ(J)

J=J-1

ΤΕΛΟΣ ΕΠΑΝΑΛΗΨΗΣ

ΤΕΛΟΣ ΕΠΑΝΑΛΗΨΗΣ

Link to comment
Share on other sites


public static void main(String[] args)
{
int[] table = new int[30];
int j;
table[0] = 1;
table[1] = 3;
table[2] = 5;

for(int i=3;i < table.length;i++)
{
j=i-1;
while(j>0)
{
table[i] = table[i] + table[j];
j--;
}

}
System.out.println(table[29]);
}

αυτο εδω ειναι οπως το ειπε ο αποπανο σε java σε c θελει 1-2 αλαγες για να παιξει

Link to comment
Share on other sites

λοιπον, εγα θα εγραφα:

array[4]=9 */ ε αυτο το γραφω κατευθειαν απο μονος μου διοτι τα επομενα στοιχεια το 5 και μετα δλδ εχουν περιεχομενο διπλασιο του προηγουμενου τους κατι που δεν ισχυει για το [4] οποτε και το γραφω απευθειας αντιο να γραψω κοδικα ν ατο υπολογιζει και δεν εχει και νοημα δλδ...*/

for( i=5; i<29; i++)

{

array = 2*array[i-1];

}

ε και μετα τυπωνεις το πινακα ή ξερω τι αλλο σας ζητανε....

Link to comment
Share on other sites

μα το μαγκικο ειναι καλητερο! αν μπορεις να κανεις την ιδια δουλεια πιο γρηγορα και με μικροτερο κοπο ο αλγοριθμος ειναι καλητερος. ειναι δλδ καλυτερο να κανεις συνεχεια προσθεσεις ολα τα προηγουμενα στηχεια το ιδιο εναν πολαπλασιασμο????? τι λεμε τωρα?

Link to comment
Share on other sites

Αρχική απάντηση από AGRIMI

D.J.AleXXX_gr ολόσωστο.

κανε αντιγραφή απιστευτος.

θα περασεις το μαθημα :):):):):)

δεν σε πιανο αλλα οκ......

Αρχική απάντηση από tolis86

μα το μαγκικο ειναι καλητερο! αν μπορεις να κανεις την ιδια δουλεια πιο γρηγορα και με μικροτερο κοπο ο αλγοριθμος ειναι καλητερος. ειναι δλδ καλυτερο να κανεις συνεχεια προσθεσεις ολα τα προηγουμενα στηχεια το ιδιο εναν πολαπλασιασμο????? τι λεμε τωρα?

νομιζω μπορει να γινει και με recursion αλλα δεν θα ειναι τοσο ευκολο κατι σε Fibonacci μου θυμιζει.....

Link to comment
Share on other sites

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

Στις περισσότερες περιπτώσεις μιά recursive είναι καλύτερη, αρκεί να μην τείθεται θέμα μνήμης. Η κάθε recursive καταναλώνει αρκετούς πόρους για να εκτελεστεί και αν μιλάμε για απειρίζουσα ακολουθία, σίγουρα θα πετάξει out of memory κάποια στιγμή :)

Link to comment
Share on other sites

ΟΚ παιδια ευχαριστω για την βοηθεια.βλεπω σας αρεσε το θεμα....απλως εκανα περιπου αυτο που εκανε ο angel με τη διαφορα οτι για το 9 επρεπε να βαλω ξεχωριστη επαναληψη που να το υπολογιζει γιατι δε συμβαδιζε με τους υπολοιπους.οριστε:

#include<stdio.h>

#include<stdlib.h>

main() {

int numbs[30]={1,3,5};

int i;

for (i=0; i<3; i++) {

printf("numbs[%d]=%d\n",i,numbs);

}

for (i=3; i<4; i++) {

numbs=((numbs[i-1]*2)-1);

printf("numbs[%d]=%d\n",i,numbs);

}

for (i=4; i<31; i++) {

numbs=numbs[i-1]*2;

printf("numbs[%d]=%d\n",i,numbs); }

system("PAUSE");

}

Link to comment
Share on other sites

Αφού διαλέγεις τον "μάγκικο" τρόπο φυσικά και το 9άρι πρέπει να το βάλεις ξεχωριστά. Από εκεί και πέρα όλα συνοψίζονται στο numbs=numbs[i-1]*2;!!

Αν και νομίζω ότι παίρνει αρκετό fine tuning ο κώδικας, well done!

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

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

Important Information

Ο ιστότοπος theLab.gr χρησιμοποιεί cookies για να διασφαλίσει την καλύτερη εμπειρία σας κατά την περιήγηση. Μπορείτε να προσαρμόσετε τις ρυθμίσεις των cookies σας , διαφορετικά θα υποθέσουμε ότι είστε εντάξει για να συνεχίσετε.