Προγραμματισμός σε C - Λύνουμε ασκήσεις

...ασύγχρονα μαθήματα γλώσσας C

Re: Προγραμματισμός σε C - Λύνουμε ασκήσεις

Δημοσίευσηαπό Monkey20 » 28 Απρ 2011, 14:41

Καλησπέρα, θα μπορούσε κάποιος να μου εξηγήσει γιατί η rand() δε λειτουργεί άμα χρησιμοποιήσω τα q και w (q=n+1, w=m+1) ενώ άμα βάλω στη θέση τους n και m λειτουργεί το πρόγραμμα?
Μη δώσετε σημασία στις συναρτήσεις το πρόγραμμα είναι ακομα υπο κατασκευή :geek:

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

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

void tamplo(int n, int m, int **pa);
void narkes(int n, int m, int **pa);

int main(int argc, char *argv[])
{
int i,j,n,m,o,p,a,b,r1,r2,q,w;
int **pa=NULL;
printf("Dwste tis diastaseis tou paixnidiou n x m\n");
printf("Prosoxh, to tamplo mporei na exei megethos to poly 24x30\n");
scanf("%d%d", &n,&m);
printf("Epilxte to epipedo duskolias tou paixnidiou\n");
printf("Pathste 1 gia eukolo, 2 gia metro, 3 gia duskolo kai 4 gia akatorthoto\n");
scanf("%d", &o);
if(o==1)
{
p=m*n/8;
}
if(o==2)
{
p=m*n/7;
}
if(o==3)
{
p=m*n/6;
}
if(o==4)
{
p=m*n/5;
}
pa=(int**)calloc(n, sizeof(int*)); //desmeush mnhmhs gia dimiourgia 2d pinaka
for(i=0;i<n;i++)
{
pa[i]=(int*)calloc(m, sizeof(int));
}
tamplo(n,m,pa);
printf("dwste tis syntetagmenes tou tetragwnou pou thelete na anoixete\n");
scanf("%d%d", &a,&b);
pa[a][b]=9;
q=n+1;
w=m+1;
for(i=0;i<p;i++)
{
do
{
r1=rand()%q;
r2=rand()%w;
}while(r1==a && r2==b);
pa[r1][r2]=1;//to 10 antiprosopevei tis narkes
}
tamplo(n,m,pa);
for(i=0;i<n;i++)
{
free(pa[i]);
}
free(pa);
system("PAUSE");
return 0;
}
Monkey20
babeTUX
babeTUX
 
Δημοσιεύσεις: 6
Εγγραφή: 28 Απρ 2011, 14:34
Εκτύπωση

Re: Προγραμματισμός σε C - Λύνουμε ασκήσεις

Δημοσίευσηαπό simosx » 28 Απρ 2011, 15:03

Είναι καλό να γράφεις το πρόγραμμα «σε στήλες» για να διαβάζεται καλύτερα.

Μπορείς να το κάνεις και τώρα, με το πρόγραμμα indent,
Κώδικας: Επιλογή όλων
sudo apt-get install indent

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

indent -tc /tmp/myprog.c


Έτσι, ο κώδικάς σου είναι

Κώδικας: Επιλογή όλων
#include <stdio.h>
#include <stdlib.h>

void tamplo (int n, int m, int **pa);
void narkes (int n, int m, int **pa);

int
main (int argc, char *argv[])
{
int i, j, n, m, o, p, a, b, r1, r2, q, w;
int **pa = NULL;
printf ("Dwste tis diastaseis tou paixnidiou n x m\n");
printf ("Prosoxh, to tamplo mporei na exei megethos to poly 24x30\n");
scanf ("%d%d", &n, &m);
printf ("Epilxte to epipedo duskolias tou paixnidiou\n");
printf
("Pathste 1 gia eukolo, 2 gia metro, 3 gia duskolo kai 4 gia akatorthoto\n");
scanf ("%d", &o);
if (o == 1)
{
p = m * n / 8;
}
if (o == 2)
{
p = m * n / 7;
}
if (o == 3)
{
p = m * n / 6;
}
if (o == 4)
{
p = m * n / 5;
}
pa = (int **) calloc (n, sizeof (int *)); //desmeush mnhmhs gia dimiourgia 2d pinaka
for (i = 0; i < n; i++)
{
pa[i] = (int *) calloc (m, sizeof (int));
}
tamplo (n, m, pa);
printf ("dwste tis syntetagmenes tou tetragwnou pou thelete na anoixete\n");
scanf ("%d%d", &a, &b);
pa[a][b] = 9;
q = n + 1;
w = m + 1;
for (i = 0; i < p; i++)
{
do
{
r1 = rand () % q;
r2 = rand () % w;
}
while (r1 == a && r2 == b);
pa[r1][r2] = 1; //to 10 antiprosopevei tis narkes
}
tamplo (n, m, pa);
for (i = 0; i < n; i++)
{
free (pa[i]);
}
free (pa);
system ("PAUSE");
return 0;
}


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

system ("PAUSE");

που χρησιμοποιείς δε λειτουργεί σε Linux (είναι για Windows), οπότε μπορείς να την αφαιρέσεις.
Ή, να χρησιμοποιήσεις κάτι σαν
Κώδικας: Επιλογή όλων
#include <stdlib.h>

int main(void)
{
system("read a");

return 0;
}


που κάνει το ίδιο πράγμα.
προσωπικό ιστολόγιο ϗ πλανήτης Ubuntu-gr
Συμβάλετε και εσείς στο ελληνικό βιβλίο Ubuntu!
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.10 saucy 3.11.0-031100rc1-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD E-450 APU with Radeon HD Graphics ‖ RAM 3555 MiB ‖ Sony Corporation VAIO
4 AMD nee ATI Wrestler [Radeon HD 6320] [1002:9806] {fglrx_pci}
5 eth0: Atheros Inc. AR8151 v2.0 Gigabit Ethernet [1969:1083] (rev c0) ⋮ wlan0: Atheros Inc. AR9285 [168c:002b] (rev 01)
Φτιάξτε και εσείς τη δική σας υπογραφή (παραπάνω κείμενο) αυτόματα με κλικ εδώ!
simosx
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10334
Εγγραφή: 11 Μάιος 2008, 18:52
Launchpad: simosx
IRC: simosx
Εκτύπωση

Re: Προγραμματισμός σε C - Λύνουμε ασκήσεις

Δημοσίευσηαπό linuxs » 01 Μάιος 2011, 14:03

Επειδή δε έχεις δώσει όλο το κώδικα δεν μπορώ να το τρέξω. Μπορείς να μου πείς που ακριβώς είναι το πρόβλημα και τι λάθος σου βγάζει. Με μια γρήγορη ματιά που το έριξα δεν έχεις κάποιο σοβαρό λάθος.

Monkey20 έγραψε:Καλησπέρα, θα μπορούσε κάποιος να μου εξηγήσει γιατί η rand() δε λειτουργεί άμα χρησιμοποιήσω τα q και w (q=n+1, w=m+1) ενώ άμα βάλω στη θέση τους n και m λειτουργεί το πρόγραμμα?
Μη δώσετε σημασία στις συναρτήσεις το πρόγραμμα είναι ακομα υπο κατασκευή :geek:

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

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

void tamplo(int n, int m, int **pa);
void narkes(int n, int m, int **pa);

int main(int argc, char *argv[])
{
int i,j,n,m,o,p,a,b,r1,r2,q,w;
int **pa=NULL;
printf("Dwste tis diastaseis tou paixnidiou n x m\n");
printf("Prosoxh, to tamplo mporei na exei megethos to poly 24x30\n");
scanf("%d%d", &n,&m);
printf("Epilxte to epipedo duskolias tou paixnidiou\n");
printf("Pathste 1 gia eukolo, 2 gia metro, 3 gia duskolo kai 4 gia akatorthoto\n");
scanf("%d", &o);
if(o==1)
{
p=m*n/8;
}
if(o==2)
{
p=m*n/7;
}
if(o==3)
{
p=m*n/6;
}
if(o==4)
{
p=m*n/5;
}
pa=(int**)calloc(n, sizeof(int*)); //desmeush mnhmhs gia dimiourgia 2d pinaka
for(i=0;i<n;i++)
{
pa[i]=(int*)calloc(m, sizeof(int));
}
tamplo(n,m,pa);
printf("dwste tis syntetagmenes tou tetragwnou pou thelete na anoixete\n");
scanf("%d%d", &a,&b);
pa[a][b]=9;
q=n+1;
w=m+1;
for(i=0;i<p;i++)
{
do
{
r1=rand()%q;
r2=rand()%w;
}while(r1==a && r2==b);
pa[r1][r2]=1;//to 10 antiprosopevei tis narkes
}
tamplo(n,m,pa);
for(i=0;i<n;i++)
{
free(pa[i]);
}
free(pa);
system("PAUSE");
return 0;
}
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ Linux: Μέτριο┃Προγραμματισμός: C┃Αγγλικά: Καλά
Λειτουργικό ⇛ Linux Ubuntu 10.4 LTS
Προδιαγραφές ⇛ Intel Pentium @T4500 2.3GHz│ 512GB VRAM│ 500 HDD│ ATI RADEON HD545v 512 MB │ Screen: 15.6''
Άβαταρ μέλους
linuxs
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1060
Εγγραφή: 02 Ιούλ 2010, 13:19
Τοποθεσία: GR
IRC: linuxs
Εκτύπωση

Re: Προγραμματισμός σε C - Λύνουμε ασκήσεις

Δημοσίευσηαπό pkt » 03 Μάιος 2011, 10:24

Προτείνω τα προβλήματα της πρώτης σελίδας του http://projecteuler.net
σαν καλή πηγή ασκήσεων για όσους θέλουν να "ακονίσουν τα δόντια τους".
pkt
babeTUX
babeTUX
 
Δημοσιεύσεις: 42
Εγγραφή: 13 Ιούλ 2009, 16:31
Τοποθεσία: Χανιά Κρήτης
Launchpad: pktoss
IRC: pkt
Εκτύπωση

Re: Προγραμματισμός σε C - Λύνουμε ασκήσεις

Δημοσίευσηαπό giannosfor » 03 Μάιος 2011, 20:27

pkt έγραψε:Προτείνω τα προβλήματα της πρώτης σελίδας του http://projecteuler.net
σαν καλή πηγή ασκήσεων για όσους θέλουν να "ακονίσουν τα δόντια τους".

Καλό αν και έλυσα μόνο το πρώτο. ;)
1 Γνώσεις Linux: Καθόλου ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 12.04 precise 3.2.0-58-generic 32bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.2.0-57-generic, Microsoft Windows XP Professional
3 Intel Core2 Duo CPU E4600 2.40GHz ‖ RAM 2012 MiB ‖ ASUS INC. P5Q - � P5Q
4 nVidia G94 [GeForce 9600 GT] [10de:0622] {nvidia}
5 eth0: Qualcomm Atheros AR8121/AR8113/AR8114 Gigabit or Fast Ethernet [1969:1026] (rev b0) ⋮ wlan0: 148f:3070 Ralink Technology, Corp. RT2870/RT3070 Wireless Adapter
Άβαταρ μέλους
giannosfor
punkTUX
punkTUX
 
Δημοσιεύσεις: 297
Εγγραφή: 24 Απρ 2011, 20:24
Τοποθεσία: Ηράκλειο
Εκτύπωση

Re: Προγραμματισμός σε C - Λύνουμε ασκήσεις

Δημοσίευσηαπό Star_Light » 06 Μάιος 2011, 01:33

Να βαλω και εγω μια ασκησουλα ??????

Να γραφτει προγραμμα σε C το οποιο θα διαβαζει ενα αρχειο απο τον αρχικο σας καταλογο /home
και στην συνεχεια θα τυπωνει τα περιεχομενα του. Το συγκεκριμενο προγραμμα μπορει να διαβαζει ειτε εναν χαρακτηρα καθε φορα
ειτε μια γραμμη απο χαρακτηρες καθε φορα .

Ειναι μια πολυ καλη και λιτη ασκηση η οποια συνδυαζει

πινακες , συναρτησεις , δεικτες (δεικτες μεσα σε συναρτησεις) και αρχεια. :thumbup: :thumbup:

ΟΠοιος θελει υποδειξη μπορω να του πω.... αν και ο καθενας μπορει να ψαξει και να το φτιαξει με δικο του τροπο

πανω κατω ομως θα χρησιμοποιηθουν η συναρτησεις : fopen , fclose για ανοιγμα και κλεισιμο του αρχειου αντιστοιχα
καθως και οι fgetc & fgets αντιστοιχα. :thumbup:
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: Προγραμματισμός σε C - Λύνουμε ασκήσεις

Δημοσίευσηαπό linuxs » 06 Μάιος 2011, 10:55

Με είχε δυσκολέψει πολύ αυτή η άσκηση όταν προσπαθούσα να μάθω τα αρχεία...πραγματικά αν ξεκινάς απο το μηδέν είναι αρκετά δυσκολούτσικα! ;)
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ Linux: Μέτριο┃Προγραμματισμός: C┃Αγγλικά: Καλά
Λειτουργικό ⇛ Linux Ubuntu 10.4 LTS
Προδιαγραφές ⇛ Intel Pentium @T4500 2.3GHz│ 512GB VRAM│ 500 HDD│ ATI RADEON HD545v 512 MB │ Screen: 15.6''
Άβαταρ μέλους
linuxs
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1060
Εγγραφή: 02 Ιούλ 2010, 13:19
Τοποθεσία: GR
IRC: linuxs
Εκτύπωση

Re: Προγραμματισμός σε C - Λύνουμε ασκήσεις

Δημοσίευσηαπό giannosfor » 06 Μάιος 2011, 15:13

Ένα πολύ απλό πρόγραμμα είναι αυτό
Κώδικας: Επιλογή όλων
#include <stdio.h>

main()
{
int ch;

while( (ch = getchar() )!= EOF )
putchar(ch);
}

Στο terminal γράφουμε το εξής:
Κώδικας: Επιλογή όλων
./file < text.txt

Οπου file το πρόγραμμα αφού το έχετε κάνει complile και text.txt το αρχειο κειμένου.
Τελευταία επεξεργασία από giannosfor και 07 Μάιος 2011, 19:59, έχει επεξεργασθεί 1 φορά/ες συνολικά
1 Γνώσεις Linux: Καθόλου ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 12.04 precise 3.2.0-58-generic 32bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.2.0-57-generic, Microsoft Windows XP Professional
3 Intel Core2 Duo CPU E4600 2.40GHz ‖ RAM 2012 MiB ‖ ASUS INC. P5Q - � P5Q
4 nVidia G94 [GeForce 9600 GT] [10de:0622] {nvidia}
5 eth0: Qualcomm Atheros AR8121/AR8113/AR8114 Gigabit or Fast Ethernet [1969:1026] (rev b0) ⋮ wlan0: 148f:3070 Ralink Technology, Corp. RT2870/RT3070 Wireless Adapter
Άβαταρ μέλους
giannosfor
punkTUX
punkTUX
 
Δημοσιεύσεις: 297
Εγγραφή: 24 Απρ 2011, 20:24
Τοποθεσία: Ηράκλειο
Εκτύπωση

Re: Προγραμματισμός σε C - Λύνουμε ασκήσεις

Δημοσίευσηαπό linuxs » 06 Μάιος 2011, 22:26

giannosfor έγραψε:Ένα πολύ απλό πρόγραμμα είναι αυτό
Κώδικας: Επιλογή όλων
#include <stdio.h>

main()
{
int ch;

while( (ch = getchar() )!= EOF )
putchar(ch);
}

Στο terminal γράφουμε το εξής:
Κώδικας: Επιλογή όλων
./file <text.txt

Οπου file το πρόγραμμα αφού το έχετε κάνει complile και text.txt το αρχειο κειμένου.


Υπάρχει και αυτός ο τρόπος να το δώσεις σαν είσοδο, αλλα δεν χρησιμοποιείς fopen() fclose() κτλ... όχι ότι είναι λάθος και απαραίτητο! ;) Ωραίος...
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ Linux: Μέτριο┃Προγραμματισμός: C┃Αγγλικά: Καλά
Λειτουργικό ⇛ Linux Ubuntu 10.4 LTS
Προδιαγραφές ⇛ Intel Pentium @T4500 2.3GHz│ 512GB VRAM│ 500 HDD│ ATI RADEON HD545v 512 MB │ Screen: 15.6''
Άβαταρ μέλους
linuxs
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1060
Εγγραφή: 02 Ιούλ 2010, 13:19
Τοποθεσία: GR
IRC: linuxs
Εκτύπωση

Re: Προγραμματισμός σε C - Λύνουμε ασκήσεις

Δημοσίευσηαπό Star_Light » 06 Μάιος 2011, 23:06

linuxs έγραψε:Με είχε δυσκολέψει πολύ αυτή η άσκηση όταν προσπαθούσα να μάθω τα αρχεία...πραγματικά αν ξεκινάς απο το μηδέν είναι αρκετά δυσκολούτσικα! ;)


Α δεν θελω τετοια... δυσκολο? Τι δυσκολο??? εδω θα φτιαξουμε ολοκληρο προγραμμα που κανει αποκρυπτογραφησεις σε ψηφιακες υπογραφες και θα το τρεξουμε στο δικτυο :lol: :lol: :lol: :lol: :lol:

Με τα αρχεια δεν ειχα ποτε καποιο σοβαρο προβλημα. Οι τελεστες χειρισμου ρων bit απο την αλλη με δυσκολευουν ακομη και τωρα.... :shifty:
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

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

Επιστροφή στο Μαθήματα C