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

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

Δημοσ.

προσπαθω να φτιάξω πρόγραμμα που να βρίσκει τα ακέραια πολλαπλάσια του 3 η του 4 στο πεδιο μεταξύ 20 και 40.

το πληθος το βρίσκει αλλα δεν τυπώνει τους αριθμούς:

 

#include <stdio.h>

int main()

{

int i, j, m=0;

for ( j=40;j>=20; j--)

{

if ((j/3==0)||(j/4==0))

printf("j = %d\n", j);

m++;

}

printf("Plithos = %d\n", m);

 

}

Δημοσ.

Αντί για "/" στις συνθήκες του if statement βάλε mod.

 

edit: Βασικά λείπουν και κάτι αγκύλες γιατί αλλιώς θα πρεπε να σου επιστρέφει μηδέν.

 

>
#include <stdio.h> 

int main() 
{ 
int i, j, m=0; 

for ( j=40;j>=20; j--)  
if ((j mod 3==0)||(j mod 4==0))
{
printf("j = %d\n", j);
m++;
}

printf("Plithos = %d\n", m); 

} 

Δημοσ.

ο κώδικας σου πρέπει να γραφεί:

 

>
#include <stdio.h> 
int main() 
{ 
 int i, j, m=0; 
 for ( j=40;j>=20; j--) 
//{  όχι στο for
   if ((j%3==0)||(j%4==0)){//<----αλλά στο if  και αντί / βάλε % (αντί διαίρεση το υπόλοιπο της)
       printf("j = %d\n", j);
       m++;//αυξηση κατα 1 αν ισχύει η συνθήκη
   }
 printf("Plithos = %d\n", m); 
}

 

.........

if ((j/3==0)||(j/4==0)){

.......

 

πές μου μια τιμή του j (20..40) που να αληθεύει η παραπάνω συνθήκη ....

Δημοσ.

και όσο για το τι σου επιστρέφει πλήθος είναι γιατί το m++; δεν είναι μέσα στο if {} αλλά μέσα στο for{} οπότε όσες φορές τρέχει η for αυξάνει και ο μετρητής σου , οι διορθώσεις είναι οι από πάνω!

Δημοσ.

Αυτό που δεν είπαν στα ίσια τα παιδιά παραπάνω είναι ότι η πράξη x / 3 όταν το x είναι int είναι ακέραια διαίρεση (π.χ. 6 / 3 = 2 αλλά 7 / 3 = 2 και επίσης 8 / 3 = 2). Επομένως δε σου κάνει.

 

Ακόμα κι αν η διαίρεση ήταν floating point, θα είχες το πρόβλημα ότι δεν μπορείς ποτέ να συγκρίνεις αριθμούς κινητής υποδιαστολής μεταξύ τους (όπως θα ήταν εδώ το αποτέλεσμα του x / 3 και το 0). Η εξήγηση είναι τεχνικά όχι και τόσο απλή, αλλά μπορείς να δεις ένα ζωντανό παράδειγμα εδώ.

 

Πέρα απ' αυτά, όπως λένε και τα παιδιά η διαίρεση εδώ δεν είναι η σωστή ιδέα έτσι κι αλλιώς, πρέπει να κάνεις τη δουλειά με modulo.

Δημοσ.

προσπαθω να φτιάξω πρόγραμμα που να βρίσκει τα ακέραια πολλαπλάσια του 3 η του 4 στο πεδιο μεταξύ 20 και 40.

το πληθος το βρίσκει αλλα δεν τυπώνει τους αριθμούς:

 

> #include <stdio.h> 
int main() 
{ 
 int i, j, m=0; 
 for ( j=40;j>=20; j--) 
 {     
 if ((j/3==0)||(j/4==0))
  printf("j = %d\n", j);
  m++;
 }
 printf("Plithos = %d\n", m); 
 
} 

 

 

Kαλησπερα! Βαζε τον κώδικα αναμεσα σε ετικέτες ωστε να

δειχνει πιο πλαισιωμένος. Εχω φτιαξει εναν δικο μου κωδικα ο

οποιος βρισκει τα πολλαπλάσια των αριθμων αλλα περαιτερω επεκτασεις δεν του εχω κανει.

 

Δικη μου αποψη ειναι να φτιαξεις πρωτα τον σκελετο. Και στη συνεχεια κολλα του μεσα οτι επεκταση

θες. Αν φτιαξεις το γενικο "καλουπι" υπολογισμου μετα τα πραγματα ειναι πολυ ευκολοτερα. Απλα μια προγραμματιστικη

τεχνικη που εχει βοηθησει εμενα τουλαχιστον.

Δημοσ.

ευχαριστώ!

και πώς μπορώ να τυπώσω ανεστραμένο ενα sting ? η βασική μου ιδέα

 

char ch[10]

.....

for(i=strlen(ch);i>=0;i--)

printf ("%c",ch);

 

για κάποιο λόγο δεν δουλεύει

Δημοσ.

έχω γραψει

 

#include <stdio.h>

#include <string.h>

int main()

{

unsigned int i;

char ch[10];

puts("dose symboloseira");

scanf("%s",ch);

...

for(i=strlen(ch)-1;i>=0;i--)

putchar (ch);}

}

και κατι κανει αλλα αμεσως μετα η κονσολα γεμίζει με αχρηστους χαρακτήρες και ακουγονται μπιπ απο το μεγαφωνάκι.

Δημοσ.

έχω γραψει

>
#include <stdio.h>
#include <string.h>
int main()
{
   unsigned int i;
   char ch[10];
   puts("dose symboloseira");
   scanf("%s",ch);
   ...
     for(i=strlen(ch)-1;i>=0;i--)
     putchar (ch[i]);}
  }

και κατι κανει αλλα αμεσως μετα η κονσολα γεμίζει με αχρηστους χαρακτήρες και ακουγονται μπιπ απο το μεγαφωνάκι.

 

Αρχικοποίησε το string σου όταν το ορίζεις, γεμίζοντάς το με μηδενικούς χαρακτήρες...

 

>
 ...
 char ch[10] = {'\0'};
 ...

 

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

 

>
#include <stdio.h>
int main( void )
{
 int i;
 char ch[10] = {'\0'];

 puts( "dose symboloseira" );
 scanf("%s",ch);
   ...
 for ( i=9; i >-1; i-- )
putchar( ch[i] );
}

Έτσι δεν χρειάζεσαι και το #include <string.h>. Σημείωσε όμως πως αν σου δώσει πολύ μικρό string ο χρήστης (π.χ. 2 χαρακτήρες) τότε σε συμφέρει καλύτερα να χρησιμοποιήσεις την strlen().

 

Δυστυχώς όμως η χρήση της scanf() δεν σου εξασφαλίζει πως θα διαβάσει λιγότερους από 9+1 χαρακτήρες από την κύρια είσοδο, οπότε αν π.χ. ο χρήστης σου πληκτρολογήσει ας πούμε 15 χαρακτήρες, τότε .... BOOM... buffer overflow του ch !

 

Για αυτό το διάβασμα των strings γίνεται με άλλες συναρτήσεις (συνήθως custom). Μπορείς όμως να το κάνεις με την στάνταρ συνάρτηση: fgets(). Το μείον της (έναντι των custom) είναι πως διαβάζει και τον χαρακτήρα αλλαγής γραμμής '\n' (εκτός αν το input κάνει overflow, οπότε το κόβει χωρίς '\n'). Άρα αν δεν τον θέλεις μέσα στο ch πρέπει να πας να τον μηδενίσεις μόνος σου (αν υπάρχει). Αυτό με τη σειρά του επαναφέρει την αναγκαιότητα της strlen() για να βρεις που κι εάν μπήκε το '\n'.

 

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

 

>
#include <stdio.h>
#include <string.h>

#define MAXSTRSIZE 	(10+1)
#define myMIN(x,y)	( (x) < (y) ? (x) : (y) )

int main( void )
{
char ch[ MAXSTRSIZE ] = {'\0'};
char *cp = NULL;

puts( "dose symboloseira" );
fgets( ch, MAXSTRSIZE, stdin );

/* find len of string, set a pointer to it & remove '\n' if any */
cp = ch + myMIN( MAXSTRSIZE, strlen(ch) ) - 1;
if ( *cp == '\n' )
	*cp-- = '\0';

/* print the string, right to left */
while ( cp >= ch )
	putchar( *cp-- );

return 0;
}

 

Ρίξε μια ματιά κι εδώ: http://x-karagiannis...gs/strings1.php

Δημοσ.

ευχαριστώ!

και πώς μπορώ να τυπώσω ανεστραμένο ενα sting ? η βασική μου ιδέα

 

char ch[10]

.....

for(i=strlen(ch);i>=0;i--)

printf ("%c",ch);

 

για κάποιο λόγο δεν δουλεύει

 

έχω γραψει

 

#include <stdio.h>

#include <string.h>

int main()

{

unsigned int i;

char ch[10];

puts("dose symboloseira");

scanf("%s",ch);

...

for(i=strlen(ch)-1;i>=0;i--)

putchar (ch);}

}

και κατι κανει αλλα αμεσως μετα η κονσολα γεμίζει με αχρηστους χαρακτήρες και ακουγονται μπιπ απο το μεγαφωνάκι.

 

"Kαλησπερα! Βαζε τον κώδικα αναμεσα σε ετικέτες ωστε να

δειχνει πιο πλαισιωμένος....... "

 

 

τιποτα! Εγω ευχαριστω που με γραψες στα παλια σου τα Nike :D

μπορουσες να το κανεις πιο κομψά ρε παιδι μου... lol

 

ευχαριστώ!

και πώς μπορώ να τυπώσω ανεστραμένο ενα sting ? η βασική μου ιδέα

 

>char ch[10]
.....
 for(i=strlen(ch);i>=0;i--)
     printf ("%c",ch[i]); 

 

για κάποιο λόγο δεν δουλεύει

 

 

Οταν λες ανεστραμένο τι ακριβώς εννοεις? Αντιστροφα να στο εκτυπώσει?

 

> 
#include<stdio.h>
#include<stdlib.h>
#define N 10
void func(char str[N]);
int main()
{
char str[N]="";

printf("Give a string: \n");
fgets(str,N,stdin);

printf("\n");
func(str);

return 0;
}
//----------------------------------------------------------------------

void func(char str[N])
{
char *sp;  // string pointer 
sp=str;	

for(sp=str; *sp!='\0' && *sp!='\n'; sp++) 

	putchar(*sp);
    
printf("\n\n");

while(sp!=str)
{
	sp--;
	printf("%c",*sp);
}

return;
}

//----------------------------------------------------------------------

 

Αυτη η συνάρτηση δέχεται ενα string και το εκτυπωνει 2 φορες. ΤΗν 1 φορα κανονικα (οπως το δίνει ο χρήστης) ενω την δεύτερη αντίστροφα.

 

> 

HELLO
OLLEH

 

Αυτη τη φορα αλαν2 να μην ευχαριστησεις εμενα (ακομη και αν αποφασισεις να βαλεις

tags στον κωδικα σου!!!!) ευχαριστησε με την μια τον migf1 γιατι αν δεν ηταν αυτος αυτα δεν θα τα ξερα

ωστε να στα παραθεσω :D

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...