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

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

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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.