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

Ερωτήσεις για C


capoelo

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

Δημοσ. (επεξεργασμένο)

Κοίτα,

 

το size_t είναι τύπος, με implementation defined υλοποίηση ως προς το μέγεθός του. Ο τύπος του αποτελέσματος του τελεστή sizeof είναι FIXED σε size_t. Τέλος, οι type-specifiers της printf() δεν αλλάζουν τον τύπο των μεταβλητών που τους αντιστοιχούν, καθορίζουν ως τι τύπος θα τυπωθούν οι τιμές αυτών των μεταβλητών στην οθόνη.

 

Ναι ρε συ.

 

Η λύση της Άσκησης 13 Σελ. 159 King

 

http://forum.ubuntu-gr.org/viewtopic.php?f=6&t=18969&start=2390

 

btw επειδη το δοκιμασα ο gcc ΔΕΝ τσινάει με %z για εκτύπωση του size_t απο τον sizeof.

 

Έχω αυτη την έκδοση του gcc

 

> kostas@kostas-SSL:/usr/include/linux$ gcc -v  

gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5.1)  

 

Και μια δικη μου υλοποιηση της 13 Σελ. 159

 

> 

#include<stdio.h>

int main(void)
{
char ch;
int count1=0 , count2=1;

printf("Enter a sentence:");

while((ch=getchar())!='\n')
{
	if(ch!=' ')
	++count1;
	
	else 	
	++count2;
	
} 

printf("\n The average length of the word is: %.1f " , (float) count1/count2  );

   
   return 0;
}

 

Την εχω λυσει απο χθες απλα νομιζα οτι ειναι λάθος επειδη αν ο χρηστης δωσει παραπανω απο 2 κενα μεταξυ των λεξεων το προγραμμα δεν εμφανιζει σωστο αποτελεσμα οπως επισης και αν ο χρηστης δωσει στην αρχη πριν το (It της προτασης του βιβλιου) ενα κενο.

 

Μετα απλα βαρεθηκα που δεν μου ερχοταν κατι και τσεκαρω και βλεπω οτι και ο Ηλιας την έχει λυσει με τον ιδιο τροπο . Η λυση που δινεις εκει migf1 έχει να κανει με τις παραπανω διορθωσεις???

 

EDIT Ναι ουσιαστικα διορθωνεις αυτα τα προβληματα , ετρεξα τον κωδικα σου !

Επεξ/σία από Star_Light
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Απαντ. 1,6k
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

#include<stdio.h>

#include<stdlib.h>

#include<conio.h>

 

int main(void)

{

int i;

char ch;

 

printf("Enter all the letters of the alphabet: \n");

 

for(i=1;i<=26;i++)

{

ch=getche();

printf("\nThe ASCII code of the character is:%d \n",ch);

}

 

 

system("Pause");

 

return 0;

}

 

Έχω το εξής πρόβλημα:Για i=26 το πρόγραμμα τρέχει επ'άπειρον,ενώ για i<=26 σταματάει κανονικά στο z.Ποια είναι η διαφορά;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

#include<stdio.h>

#include<stdlib.h>

#include<conio.h>

 

int main(void)

{

int i;

char ch;

 

printf("Enter all the letters of the alphabet: \n");

 

for(i=1;i<=26;i++)

{

ch=getche();

printf("\nThe ASCII code of the character is:%d \n",ch);

}

 

 

system("Pause");

 

return 0;

}

 

Έχω το εξής πρόβλημα:Για i=26 το πρόγραμμα τρέχει επ'άπειρον,ενώ για i<=26 σταματάει κανονικά στο z.Ποια είναι η διαφορά;

 

Σε ποιο z ? Τι θες να κανεις ? Την getche δεν την ξερω :/

 

Δοκιμασε αυτο

 

> 
#include <stdio.h>

int main( void )
{

   char ch;
   
   printf(" Give a character: ");
   
   while((ch=getchar())!='\n')
   printf(" ASCII code of your character : %d" , ch);

return 0;
}

 

Kαι για τον παραπανω λογο η while ειναι προτιμοτερη απο την for.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Να ρωτησω και εγω κατι ως προς αυτο τον κωδικα ->

 

http://ideone.com/tGq3I

 

Του εχω περιγραφη στην αρχη.

 

1. Για να αποφυγω να γραφω ξανα και ξανα τις ιδιες printf , δεν μπορω να βαλω μια εξω απο την switch ? Απλα οταν θα κανει break θα βγαινει απο την switch και θα εκτυπωνει αυτο που του εκχώρησα στην αντιστοιχη CASE που μεταφέρθηκε . Το δοκιμασα αλλα μου βγαζε περιεργα νουμερα.

 

2.

 

> 
default:
printf("%c" , ch);
break;

 

Συμφωνα με την εκφωνηση οτι δεν αντιστοιχει στην κωδικοποιηση του τηλεφωνου το αφηνουμε οπως ειναι... Δεν καταλαβαινω ομως γιατι ενω του δινουμε το 1 πχ που έχει ASCII SHO εκτυπώνεται κανονικα σαν 1. Δεν θα ήθελε %d ? :/

 

http://www.google.gr/imgres?imgurl=http://www.asciitable.com/index/asciifull.gif&imgrefurl=http://www.asciitable.com/&h=488&w=715&sz=28&tbnid=2U31hF4tTw886M:&tbnh=83&tbnw=121&prev=/search%3Fq%3Dascii%26tbm%3Disch%26tbo%3Du&zoom=1&q=ascii&docid=JMtOixefP_tDJM&hl=el&sa=X&ei=yPyGT6n-FMXN4QTKysHiBw&ved=0CCAQ9QEwAA

 

3. Γιατι έχει γινει αυτη η κωδικοποιηση στα τηλεφωνα? :P

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

1. Ναι, μπορείς να βγάλεις έξω την printf()

2. Το ASCII code 1 δεν είναι εκτυπώσιμος χαρακτήρας (οπότε υποθέτω ο κάθε compiler τυπώνει ότι γουστάρει :lol:)

3. Γιατί είναι ευκολότερο να θυμάσαι λέξεις (ή μισές λέξεις και μισούς αριθμούς) από ότι μόνο αριθμούς.

 

EDIT:

 

By the way, αντί για switch θα είναι πολύ πιο ευέλικτο αν το υλοποιήσεις με πίνακες (έχω ποστάρει κάτι παρόμοιο προ αμνημονέυτων χρόνων σε ένα παραπλήσιο νήμα στο ubuntu.gr, ούτε που θυμάμαι ποιο :lol:)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

1. Ναι, μπορείς να βγάλεις έξω την printf()

2. Το ASCII code 1 δεν είναι εκτυπώσιμος χαρακτήρας (οπότε υποθέτω ο κάθε compiler τυπώνει ότι γουστάρει :lol:)

3. Γιατί είναι ευκολότερο να θυμάσαι λέξεις (ή μισές λέξεις και μισούς αριθμούς) από ότι μόνο αριθμούς.

 

EDIT:

 

By the way, αντί για switch θα είναι πολύ πιο ευέλικτο αν το υλοποιήσεις με πίνακες (έχω ποστάρει κάτι παρόμοιο προ αμνημονέυτων χρόνων σε ένα παραπλήσιο νήμα στο ubuntu.gr, ούτε που θυμάμαι ποιο :lol:)

 

1. OK. Aπλα το προβλημα υπάρχει στο default: να δω πως θα το φτιαξω

να εκτυπωνει πχ το 1 ή - χωρις να τα αλλαξει... Μεμονομενα που δουλεψα την getchar της εδινα 1 σαν εισοδο και εκτυπωνε το 1 :lol και αλλα βεβαια 2 , 3 , 5 ....

 

2. Σωστα . Δουλευει κατα τυχη πρεπει να το δω.

 

3. Δεν ειμαι σιγουρος αν σε καταλαβα... εγω λεω για ποιο λογο ειπαν να βάλουν ABC στο πληκτρο 2 κ.ο.κ και να μην το αφησουν σκετο 2 πχ.

 

Ειπα να την λυσω χωρις πινακες... οπως λεει στο Κεφ.7 :/

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Να ρωτησω και εγω κατι ως προς αυτο τον κωδικα ->

 

http://ideone.com/tGq3I

 

Πάντως τα δικά μου τηλέφωνα έχουν στα πλήκτρα τους περισσότερα γράμματα (την πλήρη αλφάβητο):

ABC = 2, 3 = DEF, 4 = GHI, 5 = JKL, 6 = MNO, 7 = PQRS, 8 = TUV, 9 = WXYZ..

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Πάντως τα δικά μου τηλέφωνα έχουν στα πλήκτρα τους περισσότερα γράμματα (την πλήρη αλφάβητο):

ABC = 2, 3 = DEF, 4 = GHI, 5 = JKL, 6 = MNO, 7 = PQRS, 8 = TUV, 9 = WXYZ..

 

 

Δεν εχει το Q και το Z η εκφωνηση οκ :P

 

Τελοςπαντων αμα δεν βρω λυση στο προβλημα με την getchar θα την παρατησω.

 

Παρολαυτα θα ψαξω να δω γιατι εκτυπωνει τα 1,2,3 στο ASCII ενω κανονικα δεν ειναι εκτυπωσιμοι χαρακτηρες.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δεν εχει το Q και το Z η εκφωνηση οκ :P[..]

 

Χμ, τελικά φαίνεται ότι συνηθίζεται, πριν αρκετό καιρό είχα ασχοληθεί με ένα ανάλογο θέμα σχετικά με την τηλεφωνική αλφάβητο (το οποίο είχε αναρτηθεί σε κάποιο topic του παρόντος forum -είχε λυθεί με διάφορους τρόπους btw) και από ότι βλέπω και εκεί στην εκφώνηση έδιναν την ίδια διάταξη στην τηλεφωνική αλφάβητο..

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Τελικά βρήκα κι εγώ εκείνο το ποστ που έλεγα στο ubuntu.gr: http://forum.ubuntu-gr.org/viewtopic.php?p=191096#p191096

Με αυτή την εκφώνηση: http://forum.ubuntu-gr.org/viewtopic.php?p=143161#p143161

 

(δεν ήταν και τόσο παλιά τελικά, 5 Ιουνίου 2011 ήταν)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Από περιέργεια πάντως, σε C++ θα μπορούσε να υλοποιηθεί αρκετά εύκολα με multimap..

 

 

 

>
/*
* Telephone Alphabet, Decoder.
* xdir.
*/

#include <iostream>
#include <utility>
#include <cstring>
#include <map>

using namespace std;

int main(void) {

multimap<char, int> Alpha;

/* Setup Telephonic alphabet *
 * ----------------------- *
 * 1     | 2 ABC | 3 DEF   *
 * ------+-------+-------- *
 * 4 GHI | 5 JKL | 6 MNO   *
 * ------+-------+-------- *
 * 7 PQRS| 8 TUV | 9 WXYZ  *
 * ------+-------+-------- *
 *                         *
 * L = Letter, D = Digit   */
for(int L = 0, D = 2; L < 26; L++, !(L % 3) ? D++: D)
{
	if(L == 18 || L == 21) D--;

	Alpha.insert(make_pair(L + 'A', (D == 10 ? D - 1: D)));
	Alpha.insert(make_pair(L + 'a', (D == 10 ? D - 1: D)));

	if(L == 18 || L == 21) D++;
}

/* Parse input.. */
while(true)
{
	static char In[bUFSIZ];

	cout <<"Type .. to quit else number :";
	cin.getline(In, BUFSIZ);

	if(!(*In))
		continue;

	if(!strcmp(In, ".."))
		break;

	for(int I = 0; I < strlen(In); I++)
		cout << (char)(Alpha.find(In[i]) ==
			Alpha.end() ?In[i]: '0' + Alpha.find(In[i])->second);

	cout <<'\n';
}

return 0;
}

 

* Έχει δοκιμασθεί σε C++ Builder και μπορεί να περιέχει bugs ή άλλες αβλεψίες.

 

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Από περιέργεια πάντως, σε C++ θα μπορούσε να υλοποιηθεί αρκετά εύκολα με multimap..

 

 

 

>
/*
* Telephonic Alphabet, Decoder.
* xdir.
*/

#include <iostream>
#include <utility>
#include <cstring>
#include <map>

using namespace std;

int main(void) {

multimap<char, int> Alpha;

/* Setup Telephonic alphabet *
    * ----------------------- *
    * 1 	| 2 ABC | 3 DEF   *
    * ------+-------+-------- *
    * 4 GHI | 5 JKL | 6 MNO   *
    * ------+-------+-------- *
    * 7 PQRS| 8 TUV | 9 WXYZ  *
    * ------+-------+-------- *
    *                     	*
    * L = Letter, D = Digit   */
for(int L = 0, D = 2; L < 26; L++, !(L % 3) ? D++: D)
{
	if(L == 18 || L == 21) D--;

	Alpha.insert(make_pair(L + 'A', (D == 10 ? D - 1: D)));
	Alpha.insert(make_pair(L + 'a', (D == 10 ? D - 1: D)));

	if(L == 18 || L == 21) D++;
}

/* Parse input.. */
while(true)
{
	static char In[bUFSIZ];

	cout <<"Type .. to quit else number :";
	cin.getline(In, BUFSIZ);

	if(!(*In))
		continue;

	if(!strcmp(In, ".."))
		break;

	for(int I = 0; I < strlen(In); I++)
		cout << (char)(Alpha.find(In[i]) ==
			Alpha.end() ?In[i]: '0' + Alpha.find(In[i])->second);

	cout <<'\n';
}

return 0;
}

 

* Έχει δοκιμασθεί σε C++ Builder και μπορεί να περιέχει bugs ή άλλες αβλεψίες.

 

 

 

:) :) :) :)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ευχαριστω για τις απαντησεις .

 

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

Αν γινεται. Λογικα γινεται αν υπαρχει συναρτηση η οποια εκτος απο χαρακτηρες

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

Δεν με ενδιαφερει ακομη να σκεφτω σε ορους strings , πινακων , δεικτων και συναρτησεων εκτος του οτι δεν εχει μπει

το βιβλιο ακομη σε αυτα τα κεφαλαια.

 

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

Τα νυχια μου θα μυρισω? αμα δεν μου βγαινει μια άσκηση? ή μηπως πρεπει να ζαλίζω κοσμο στο ιντερνετ :/

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

...

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

Τα νυχια μου θα μυρισω? αμα δεν μου βγαινει μια άσκηση? ή μηπως πρεπει να ζαλίζω κοσμο στο ιντερνετ :/

 

Να ζαλίζεις κόσμο στο Ιντερνετ. Να παραθέτεις οτι κώδικα έχεις γράψει και να ζητάς βοήθεια ;)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

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