Προς το περιεχόμενο

c πινακασ


johnys20

Προτεινόμενες αναρτήσεις

Δημοσ.

να φτιαχνει ενα μονοδιαστατο πινακα και να τν γεμιζει με 4 ασουσ μετα με 4 μηδενικα μετα με 4 ασους και παει λεγοντασ κανεισ βοηθεια

Δημοσ.

να φτιαχνει ενα μονοδιαστατο πινακα και να τν γεμιζει με 4 ασουσ μετα με 4 μηδενικα μετα με 4 ασους και παει λεγοντασ κανεισ βοηθεια

 

 

Μπορείς να είσαι λίγο πιο συγκεκριμένος??

Πόσες θέσεις θέλεις να έχει ο πίνακας?

Το,, "πάει λέγοντας" δηλαδή πού φτάνει??

θέλεις να δίνεται παραμετρικά??

Κι άν οι θέσεις που ορίζονται παραμετρικά δεν είναι πολλάπλάσιο του 4, τί θες να γίνεται ...

 

Μπορείς να περιγράψεις το πρόβλημά σου??

Δημοσ.

Μπορείς να είσαι λίγο πιο συγκεκριμένος??

Πόσες θέσεις θέλεις να έχει ο πίνακας?

Το,, "πάει λέγοντας" δηλαδή πού φτάνει??

θέλεις να δίνεται παραμετρικά??

Κι άν οι θέσεις που ορίζονται παραμετρικά δεν είναι πολλάπλάσιο του 4, τί θες να γίνεται ...

 

Μπορείς να περιγράψεις το πρόβλημά σου??

ναι παραμετρικα αν δν ειναι πολλαπλασιο του 4 να γεμιζει οσεσ χοραει.για ν θεσεισ πινακα

Δημοσ.

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

 

ΥΓ. Αν δυσκολεύεσαι με το τελικό 'ς' μπορείς να βάλεις κάποιο dictionary στον browser σου.

Δημοσ.

να φτιαχνει ενα μονοδιαστατο πινακα και να τν γεμιζει με 4 ασουσ μετα με 4 μηδενικα μετα με 4 ασους και παει λεγοντασ κανεισ βοηθεια

Σε C++ μπορεί να γραφθεί ως εξής:

>
/* Fill Array, directx. */

#include <stdio.h>
#include <stdlib.h>

#define _ARR_LEN 16

int main(void)
{
int *ptrArray = NULL;

if((ptrArray = (int*)calloc(_ARR_LEN, sizeof(int))) != NULL)
	for(int I = 0, V = 0, VC = 0; I < _ARR_LEN;
		I++, ++VC == 4 ? VC = 0: VC, !VC ? V = !V: V)
			printf("[%.2d] = %d\n", I + 1, (ptrArray[i] = V));
free(ptrArray);

printf("\nPress Enter to exit..");
getchar();

return 0;
}

Ο μονοδιάστατος πίνακας δημιουργείται δυναμικά με την βοήθεια της ρουτίνας calloc με το μέγεθος των στοιχείων του να ορίζεται από το _ARR_LEN define στις 16 θέσεις ώστε να μπορεί να χωρέσει 4 διαφορετικές αλλαγές από 0 σε 1 και το αντίστροφο.

Ακολουθεί ένα for-loop με 3 μεταβλητές, μια συνθήκη και 3 δηλώσεις. Η μεταβλητή I υποδεικνύει την θέση του πίνακα στην οποία θα αποθηκευτεί το 0 ή 1 και αυξάνεται συνεχώς (I++) ως το _ARR_LEN (συνθήκη I < _ARR_LEN). Η μεταβλητή VC αυξάνεται ως το 4 (++VC == 4, VC) και ύστερα μηδενίζεται ξεκινώντας το μέτρημα από την αρχή (VC = 0). Η μεταβλητή V αποθηκεύει το 0 ή 1 που πρέπει να τοποθετηθεί ανά 4 θέσεις στον πίνακα. Το περιεχόμενο της V αποφασίζεται από την συνθήκη «!VC ? V = !V: V» η οποία αντιστρέφει (!V) το περιεχόμενο της V όταν ο μετρητής VC γίνεται μηδέν (!VC). Όλες οι συνθήκες χρησιμοποιούν τον τριαδικό-τελεστή ?

Η τιμή της μεταβλητής V αποθηκεύεται στον πίνακα ((ptrArray[ I ] = V)) και εκτυπώνεται στο STDOUT (printf("[%.2d] = %d\n", I + 1 ...)

Αφού ολοκληρωθεί το for-loop, το πρόγραμμα αποδεσμεύει τον πίνακα (free(ptrArray); ) και τερματίζει με prompt στον χρήστη.

 

Η έξοδος του λογισμικού:

 

 

>
[01] = 0
[02] = 0
[03] = 0
[04] = 0
[05] = 1
[06] = 1
[07] = 1
[08] = 1
[09] = 0
[10] = 0
[11] = 0
[12] = 0
[13] = 1
[14] = 1
[15] = 1
[16] = 1

Press Enter to exit..

 

Για την ιστορία, ο κώδικας μπορεί να γίνει ακόμα πιο compact με την βοήθεια του mod (%) operator όπου αν (I % 4) == 0 αντιστροφή του V ως "!(I % 4) ? V = !V: V". Σε αυτή την εκδοχή του προγράμματος η μεταβλητή VC δεν είναι απαραίτητη καθώς η λειτουργία της αντικαθίσταται από την I:

 

 

>
/* Fill Array, modulo version, directx. */

#include <stdio.h>
#include <stdlib.h>

#define _ARR_LEN 16

int main(void)
{
int *ptrArray = NULL;

if((ptrArray = (int*)calloc(_ARR_LEN, sizeof(int))) != NULL)
	for(int I = 0, V = 0; I < _ARR_LEN; I++, !(I % 4) ? V = !V: V)
		printf("[%.2d] = %d\n", I + 1, (ptrArray[i] = V));
free(ptrArray);

printf("\nPress Enter to exit..");
getchar();

return 0;
}

Έξοδος:

>
[01] = 0
[02] = 0
[03] = 0
[04] = 0
[05] = 1
[06] = 1
[07] = 1
[08] = 1
[09] = 0
[10] = 0
[11] = 0
[12] = 0
[13] = 1
[14] = 1
[15] = 1
[16] = 1

Press Enter to exit..

 

Και τα δυο προγράμματα έχουν δοκιμασθεί σε C++ Builder 2009 επιτυχώς αν και μπορεί να περιέχουν bugs ή άλλες αβλεψίες.

 

Καλή συνέχεια!

:)

 

Υ.Γ.

Ελπίζω κάποια έκδοση, αν γράφεις σε C να σε καλύψει - δηλαδή να σου φανεί ευκολότερη (ειδικά μελετώντας τις επεξηγήσεις) και εντός του ότι έχεις ήδη διδαχθεί.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

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