Jump to content



πινακας σε c


απιστευτος

Recommended Posts

Δημοσιεύτηκε

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

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

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

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

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

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

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

Φίλε μου δε θυμάμαι καλά 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

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

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


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 αλαγες για να παιξει

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

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

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

{

array = 2*array[i-1];

}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΟΚ παιδια ευχαριστω για την βοηθεια.βλεπω σας αρεσε το θεμα....απλως εκανα περιπου αυτο που εκανε ο 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");

}

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

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

Archived

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

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

Important Information

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