Τα πάντα για την C

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό medigeek » 13 Ιουν 2011, 01:09

Να σε ρωτήσω, μιας και το δοκιμάζεις, όταν είναι μια φορά το getchar() στο windows δουλεύει;
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό clepto » 13 Ιουν 2011, 01:13

όχι...το δοκίμασα και κλείνει αμέσως..
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό migf1 » 13 Ιουν 2011, 01:20

Στα Windows δουλεύει με:

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

fflush(stdin);
getchar();


Για να δουλεύει παντού, αντί για getchar() όρισε ένα string με μεγάλο μήκος, π.χ. dummy[255+1] και αντί για getchar() γράψε...

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

char dummy[255+1]=""; // ορισμός προσωρινού string
...
...
printf("\npress ENTER to exit...");
fflush(stdin);
fgets(dummy, 255+1, stdin);
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό migf1 » 13 Ιουν 2011, 01:39

Κι άμα σκοπεύεις να το χρησιμοποιείς συχνά, μπορείς να το κάνεις και macro. Π.χ. μετά από τα #include στην αρχή του προγράμματος γράψε κάτι σαν αυτό:

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

#define wait(msg) \
char sss[256]; printf("\n%s", (msg)); fflush(stdin); fgets(sss, 256, stdin)


κι όπου μετά χρειάζεσαι να πατάει ENTER ο χρήστης, θα γράφεις π.χ.:

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

wait("press ENTER...");
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό clepto » 13 Ιουν 2011, 02:19

ευχαριστώ...
αύριο το βλέπω να έρχομαι με απορίες γιατί προσπαθώ να λύσω μια άσκηση... :P
τώρα όμως είμαι κουρασμένος και πάω για ύπνο!
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό clepto » 13 Ιουν 2011, 20:23

M.Jackson έγραψε:Σε ένα διαγωνισμό του Ubuntu-gr.org εξετάζονται 1500 μέλη. Ως εξεταστικό website χρησιμοποιείται ένα εικονικό κτήριο με αίθουσες διαφορετικής χωρητικότητας. Ο αριθμός των επιτηρητών που απαιτούνται ανά αίθουσα καθορίζεται αποκλειστικά με βάση τη χωρητικότητα της αίθουσας ως εξής:

Μέχρι και 15 θέσεις => 1 Επιτηρητής
Από 16 μέχρι και 23 θέσεις => 2 Επιτηρητές
Πάνω από 23 θέσεις => 3 Επιτηρητές

Να γίνει πρόγραμμα που:
α) για κάθε αίθουσα θα διαβάζει τη χωρητικότητα της, θα υπολογίζει και θα εμφανίζει τον αριθμό των επιτηρητών που χρειάζεται. Ο υπολογισμός του αριθμού των επιτηρητών να γίνεται από συνάρτηση
β) θα σταματάει όταν εξασφαλισθεί ο απαιτούμενος συνολικός αριθμός θέσεων.


προσπαθώ να κάνω αυτήν την άσκηση, μέχρι τώρα έχω γράψει αυτά αλλά αν το τρέξετε βγαίνουν κάτι νούμερα στην αρχή...που είναι τα return που έχω βάλει αλλιώς δεν δούλευε κανονικά, επίσης στο δεύτερο if δεν ξέρω αν το if (16<=x<=23); είναι σωστό...


Κώδικας: Επιλογή όλων
#include <stdio.h>
#include <string.h>
#include <math.h>
int x; //χωρητικοτητα
int y; //επιτηρητες
int sum, num = 0;


aith(x) {

if (x<15) {
y=1;
printf(" %d ", y);
return 1;
}

if (16<=x<=23); {
y=2;
printf(" %d ", y);
return 2;
}

if (x>23) {
y=3;
printf(" %d ", y);
return 3;
}
}


main(void){

while( num<1500 ) {
printf("Xwritikotita ta3hs: ");
scanf("%d", &sum);
printf("Xreiazestai %d epiririth/es", aith(sum));

}
}
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό migf1 » 13 Ιουν 2011, 21:09

Το μόνο που πρόλαβα να δω είναι πως έχεις ένα περιττό ; στην συνθήκη

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

if (16<=x<=23); {


Δοκίμασε να το αλλάξεις σε...
Κώδικας: Επιλογή όλων

if ( x>15 && x<24) {


ΥΓ. Επίσης υπάρχουν πολλά άλλα θέματα με τον κώδικα, αλλά να τον δω λίγο και θα σου πω (άσκηση σε σχολή είναι αυτό; )
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό migf1 » 13 Ιουν 2011, 21:30

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

Το while-loop σου στην main() δεν σταματάει ποτέ, κοίταξέ το λιγάκι να το φτιάξεις (σου έχω βάλει σχόλιο). Επίσης, τις μεταβλητές σου να τις ορίζεις ΜΟΝΟ στη συνάρτηση που τις χρειάζεσαι και όχι καθολικά για όλες. Και προσπάθησε τώρα που είσαι στην αρχή να μάθεις να γράφεις ευανάγνωστο κώδικα (με tabs, spaces, κατανοητά ονόματα μεταβλητών & συναρτήσεων, σχόλια, κλπ)

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

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h> // for exit()

// ---------------------------------------------------------------------------
int epitirites( int seats )
{
if ( seats < 15 )
return 1;

if ( seats > 15 && x < 24)
return 2;

if ( seats > 23 )
return 3;

}

// ---------------------------------------------------------------------------
int main( void )
{
int seats, num = 0;

while( num < 1500 ) { // Αυτό το lool δεν σταματάει ΠΟΤΕ!
printf("\nXwritikotita ta3hs: ");
fflush(stdin);
scanf("%d", &seats);
printf("Xreiazeste %d epitirith/es\n", epitirites(seats) );
}

exit(0);
}

Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό medigeek » 13 Ιουν 2011, 21:37

Το "exit(0);" είναι αναγκαίο; Το "return 0;" μπορεί να μπει στη θέση του;
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό migf1 » 13 Ιουν 2011, 21:44

Μπορεί, αλλά το return δεν κάνει cleanup. Το ANSI standard επιβάλει η main() να τερματίζει με exit() γιατί η exit() κάνει cleanup τυχόν αμέλειες του προγραμματιστή πριν επιστρέψει στο OS (π.χ. κλείνει ανοιχτά αρχεία, καθαρίζει μνήμες, κλπ)
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

ΠροηγούμενηΕπόμενο

Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι