Πληροφορικάριος
Δραστήριο μέλος
Code:#include<stdio.h> main() { int c,x,y,z,k,l,m,n,o,p; printf("Grapse enan akeraio arithmo mikrotero tou 1000 : "); scanf("%c",&c); c%x=0 c%y=0 c%z=0 c%k=0 c%l=0 c%m=0 c%n=0 c%o=0 p=1; x+y+z+k+l+m+n+o+p=c printf("%d, %d, %d, %d, %d, %d, %d, %d, %d",x,y,z,k,l,m,n,o,p); }
Τι προσπαθείς να κάνεις εδώ? δεν κατάλαβα. Πρώτα πρώτα πρέπει να δείς πως δουλεύει κάθε τελεστής.
Πάντως όπως είπε και ο akikos μπορείς να το κάνεις με μία for κάπως έτσι:
#include <iostream>
using namespace std;
int main()
{
int num;
do
{
cout << ">>";
cin >> num;
}while(num>1000 || num<1);
int sum=0;//άθροισμα των διαιρετών
for(int i=1; i<=num/2; i++)
if( num%i == 0)
sum+=i;
if(sum==num)
cout << "O arithmos " << num << " einai teleios." <<endl;
else
cout << "O arithmos " << num << " den einai teleios." <<endl;
system("PAUSE");
}
Σημείωση: Το μήνυμα αυτό γράφτηκε 11 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Πληροφορικάριος
Δραστήριο μέλος
Σημείωση: Το μήνυμα αυτό γράφτηκε 11 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Πληροφορικάριος
Δραστήριο μέλος
#include<iostream>
#include<string>
using namespace std;
int main()
{
string name1,name2;
cout<<"dwste omades: ";
cin>>name1>>name2;
if(name1.length()>name2.length())
cout<<"kerdise h omada: "<<name1<<endl;
else if(name1.length()<name2.length())
cout<<"kerdise h omada: "<<name2<<endl;
else
cout<<"isopalia"<<endl;
}
Σου προτείνω να διαβάσεις λίγο τα strings και μετά να σκευτείς ασκήσεις για να λύσεις.(αν δεν βγάζεις άκρη απο το διαδίκτυο αγόρασε ένα βιβλίο)
Σημείωση: Το μήνυμα αυτό γράφτηκε 11 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Πληροφορικάριος
Δραστήριο μέλος
Σημείωση: Το μήνυμα αυτό γράφτηκε 11 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Πληροφορικάριος
Δραστήριο μέλος
4.δεν σε πιάνω..αλλα θα μαθω για το while και πιστευω να σε πιάσω .
5.εβαλα return παντου ..γιατι αν δεν εμπαινε..μου ξαναζητουσε ώρες φροντιστηριων σε καθε μαθημα..(αν θες τρέξε το προγραμμα χωρις return..και με return,για να καταλάβεις..)
Σου ξαναζητάει ώρες φροντιστηρίων γιατί τα έχεις βάλει μέσα σε ένα ατέμονο while.Βάλε if ή καλύτερα switch.Παραδειγμα while:
i=1;
while(i<=3)//όσο i μικρότερο ή ίσο του 3
cout<<i++<<endl;
1
2
3
Σημείωση: Το μήνυμα αυτό γράφτηκε 11 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Πληροφορικάριος
Δραστήριο μέλος
2.Να δηλώνεις όσο πιο λίγες μεταβλητές μπορείς.
3.Στην προκειμένη περίπτωση καλύτερα να χρησιμοποιήσεις την switch αν δε ξέρεις τι είναι μάθε το.
4.Τα while ειναι για επαναληπτική διαδικασία κατι που δεν θες τώρα.Με το ίδιο switch θα γίνετε και αυτό.Ένωσε τα if και τα while σε ένα switch.
5.return 0 να βάζεις μόνο στο τέλος του προγράμματος.
Σημείωση: Το μήνυμα αυτό γράφτηκε 11 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Πληροφορικάριος
Δραστήριο μέλος
καταλαβα.
Υθελα να δω πως λειτουργει ο υπολογιστης και οχι τι ειναι το &.
Ενα κενο ομως υπαρχει ακομα.
Πως γινεται μια εντολη return x; την μια να επιστρεφει μια τιμη και την αλλη μια αναφορα στη μεταβλητη χ.
???
Η αναφορική συνάρτηση δεν επιστρέφει τα περιεχόμενα της θέσης μνήμης της x αλλα αναφορά στην θέση μνήμης της x.
Απλά αν θές η συνάρτηση να επιστρέφει αναφορά στην μεταβλητή που κάνεις return βάζεις & αν θές διεύθηνση βάζεις * και αν θες τα περιεχόμενα δεν βάζεις τίποτα.
Αν επιστέφει διεύθυνση πρέπει να είναι return &x; όπως και στις απλές μταβλητές πχ int a,*b=&a;
στις αναφορές δεν χρειάζετε τίποτα όπως και στις απλές μεταβλητές: int a,&b=a;
Απο αυτά που καταλαβαίνω σου λέω και εγώ.Ρώτα τον καθηγητή σου για καλύτερες απαντήσεις.
Σημείωση: Το μήνυμα αυτό γράφτηκε 12 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Πληροφορικάριος
Δραστήριο μέλος
Δεν έχει διαφορετικες επιστρεφομενες τιμες,η μία επιστρεφει την τιμή της x και η άλλη επιστρέφει αναφορά στην x.αν έχει τo & στην δήλωση επιστρέφει αναφορά.. Πως γινεται μια συναρτηση με το ιδιο body να εχει διαφορετικες επιστρεφομενες τιμες ...;
Επιστρέφει αναφορά στην θέση μνήμης του x.Το δεύτερο που λές πρέπει να ισχύει.Επισης με την φραση "επιστρεφει μια αναφορα στο x τι εννοουμε" ; Επιστρεφει διευθυνση, μια μεταβλητη χωρις ονομα η οποια αποτελει μια αναφορα στο x ;
#include<iostream>
using namespace std;
int x=3;
int &f(){return x;}
int main()
{
int k=6;
cout<<f()<<endl;
f()=k;
cout<<f()<<endl;
return 0;
}
καλειτε η συνάρτηση επιστρέφει αναφορα στην x(δηλαδή αναφορά στην θέση μνήμης της x) εμφανίζετε το 3
καλειτε η συνάρτηση επιστρέφει αναφορα στην x και καταχωρήτε στο x το 6.
Βασικά το "f()" είναι σαν το όνομα της "αναφορικής μεταβλητής" στην x.
Σημείωση: Το μήνυμα αυτό γράφτηκε 12 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Πληροφορικάριος
Δραστήριο μέλος
Σημείωση: Το μήνυμα αυτό γράφτηκε 12 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Πληροφορικάριος
Δραστήριο μέλος
μετά πήγαινε ιδιότητες στο cmd (πάνω αριστερά)και επέλεξε γραμματοσειρά lucida console.
Σημείωση: Το μήνυμα αυτό γράφτηκε 12 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Πληροφορικάριος
Δραστήριο μέλος
book *ptr[2]; Δεν θα επρεπε να καθε στοιχειο οτον πινακα να δειχνει σε ενα τυπο δεδομενων book και οχι book1 ή book2 ;
2) Θα πρεπει συναρτησεις σαν την show() να εχουν ιδιο τυπο και ονομα ή πρεπει και η λιστα παραμετρων να ειναι ιδια;
3) Όταν οι συναρτήσεις (δεν) είναι virtual ένας δείκτης της ΠΑΡΑΓΟΥΣΑΣ κλασης θα καλεσει αναγκαστικα την show της book1 (ή 2)
ή θα υπαρξει προβλημα . Αν ισχυει ο παραπανω ισχυρισμος τοτε για την show() της βασης πρεπει να γραψω *ptr_to_book1.book::show();
1.Αυτό είναι το νόημα των εικονικών συναρτήσεων:ο δείκτης της βασικής κλάσης book να μπορεί να καλεί τις συναρτήσεις show των άλλων κλάσεων ανάλογα με το τι τύπου αντικείμενο του έχει εκχωρηθεί. Δηλαδή στο ptr[0] έχει εκχωρηθει τύπος δεδομένων book1 άρα το ptr[0]->show() θα καλέσει την show της κλάσης book1. Αν κάθε στοιχειο του πίνακα δείχνει σε ενα τύπο δεδομένων book δεν θα έχει νόημα.Εννοειτε πως μπορεί να συμβαίνει και αυτό:
#include<iostream>
#include<string.h>
using namespace std;
class book
{
protected:
char name[30];
public:
book(char n[]){strcpy(name,n);}
book(){};
virtual void show(){cout<<name<<" paramithia"<<endl;}
};
class book1:public book
{
public:
book1(char n[]){strcpy(name,n);}
void show(){cout<<name<<endl;}
};
class book2:public book
{
public:
book2(char n[]){strcpy(name,n);}
void show(){cout<<name<<endl;}
};
int main()
{
char name1[]="Kokkinoskoyfitsa";
char name2[]="Ta tria gourounakia";
char name3[]="paramithenia";
book1 b1(name1);
book2 b2(name2);
book *ptr[2],b(name3);
ptr[0]=&b1;
ptr[1]=&b;
for(int i=0;i<2;i++)
ptr[i]->show();
return 0;
}
2.Πρέπει να είναι ίδιου τύπου και να έχει ίδιο τύπο και αριθμό παραμέτρων.
3.Μόνο ένας δείκτης της βασικής κλάσης μπορεί να καλέι συναρτήσεις άλλων κλάσεων αν είναι φυσικά εικονικές.Αν ο δείκτης της παράγωγης κλασης δείχνει σε δικό της αντικείμενο θα καλέσει την δικία της show αλλιως θα δημιουργηθεί σφάλμα.
Σημείωση: Το μήνυμα αυτό γράφτηκε 12 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Πληροφορικάριος
Δραστήριο μέλος
{
#include<iostream>
#include<string.h>
using namespace std;
class book
{
protected:
char name[30];
public:
virtual void show(){cout<<"paramithia."<<endl;}
};
class book1:public book
{
public:
book1(char n[]){strcpy(name,n);}
void show(){cout<<name<<endl;}
};
class book2:public book
{
public:
book2(char n[]){strcpy(name,n);}
void show(){cout<<name<<endl;}
};
int main()
{
char name1[]="Kokkinoskoyfitsa";
char name2[]="Ta tria gourounakia";
book1 b1(name1);
book2 b2(name2);
book *ptr[2];
ptr[0]=&b1;
ptr[1]=&b2;
for(int i=0;i<2;i++)
ptr[i]->show();
return 0;
}
Αν μια συνάρτηση δηλωθεί ως virtual στην βασική κλάση τότε ένας δείκτης της βασικής κλασης μπορεί να καλέσει τις συναρτήσεις-μέλη των παράγωγων κλάσεων.
Στο παράδειγμα η show ειναι εικονική.Ο πίνακας δεικτών ptr ειναι της βασικής κλάσης οπου ptr[0] δείχνει στο αντικείμενο b1 και ptr[1] στο b2.Αν η show δεν είχε δηλώθει ως εικονική ο ptr δεν θα μπορούσε να καλέσει την show των b1 και b2 ,θα καλούσε την δικία του show και θα εκτύπωνε
paramithia
paramithia
ενώ τώρα μπορεί και εκτυπώνει:
Kokkinoskoyfitsa
Ta tria gourounakia
}
αλλιώς
ξαναρώτα;
Σημείωση: Το μήνυμα αυτό γράφτηκε 12 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Πληροφορικάριος
Δραστήριο μέλος
Το int μπροστά απο την main δηλώνει πως η main() θα επιστρέψει στο σύστημα έαν ακέραιο αριθμό(integer) π.χ. ο Γιώργης Χατζηπαυλομαραγκάκης 0 3ος επιστρέφει 0 που σημαίνει πως όλα πήγαν καλά.(μην σε απασχολουν τώρα αυτά θα μάθεις μετά για τις συναρτήσεις.)
να ρωτήσω γιατι να ξεκίνησω με C?
Αν έχεις πάει σε ικανοποιητικό επίπεδο την python δεν υπάρχει λόγος να δεις πρώτα C διαφορετικά δες πρώτα C γιατι είναι πιο εύκολη και αν την μάθεις καλά θα μάθεις και C++ ευκολότερα.
Σημείωση: Το μήνυμα αυτό γράφτηκε 12 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Πληροφορικάριος
Δραστήριο μέλος
Τώρα δουλεύει αλλά δεν κατάλαβα ακριβώς πως λειτουργεί αυτό
else
{
if(MaxProductSum(Array,Dim,sum,product)==1)
return 1
else
return -1
}
μπόρεις να το εξηγήσεις λίγο;
Οταν το dim γίνει 0 θα επιστρεψει 1 ή -1 στην προηγούμενη συνάρτηση που το dim ήταν 1.Αν επεστρεψε 1 τότε και αυτή θα επιστρέψει 1 στην συνάρτηση που το dim ήταν 2 αλλιώς -1. . . μέχρι να φτάσει στην πρώτη συνάρτηση και να το επιστρέψει στην main.
Το προηγούμενο ήταν λάθος γιατι δεν επεστρεφε τίποτα στην main το μόνο return γινότανε στην τελευταία συνάρτηση με dim 0.
Σημείωση: Το μήνυμα αυτό γράφτηκε 12 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Πληροφορικάριος
Δραστήριο μέλος
Αντέγραψα ακρίβως τον κώδικα και βγάζει παλι ασχετο αριθμό .......
Ναι ήταν λαθος.Επεστρεφε το 1 μόνο την πρώτη φορα βάλε αυτο:
#include<stdio.h>
#include<stdlib.h>
int MaxProductSum(float *Array,int Dim,float sum,float product)
{
sum+=Array[--Dim];//1η επανάληψη sum=3,2η επανάληψη sum=5 3η επανάληψη sum=6//
product*=Array[Dim];//1η επανάληψη product=3 2η και 3η επανάληψη product=6//
if(Dim==0)//1η και 2η επανάληψη ψευδής,3η επανάληψη αληθής//
{
if(sum<product)//6==6 είναι ίσα και επιστρέφει 1//
return(-1);
else
return(1);
}
else
if(MaxProductSum(Array,Dim,sum,product)==1)
return 1;
else
return -1;
}
int main(void)
{
float a[]={1,2,3};
printf("%d",MaxProductSum(a,3,0,1));
return 0;
}
Σημείωση: Το μήνυμα αυτό γράφτηκε 12 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Πληροφορικάριος
Δραστήριο μέλος
Κύριε Πληροφοριακέ τι σημαίνουν αυτά " #include<iostream>" '
"using namestream std;" "cout<<MaxProductSum(a,2,sum,product)<<end1; εμένα ο μεταγλωτιστής τα παίρνει λαθός.
θέλω μέσα απο ένα σύνολο αριθμών να βρίσκει ποιό είναι μεγαλύτερο το άθροισμα ή το γινόμενο.
Συγνώμη δεν είδα οτι μιλάς για C επειδή το θέμα είναι για C++..Kοίτα αυτό:
#include<stdio.h>
#include<stdlib.h>
int MaxProductSum(float *Array,int Dim,float sum,float product)
{
sum+=Array[--Dim];//1η επανάληψη sum=3,2η επανάληψη sum=5 3η επανάληψη sum=6//
product*=Array[Dim];//1η επανάληψη product=3 2η και 3η επανάληψη product=6//
if(Dim==0)//1η και 2η επανάληψη ψευδής,3η επανάληψη αληθής//
{
if(sum<product)//6==6 είναι ίσα και επιστρέφει 1//
return(-1);
else
return(1);
}
else
MaxProductSum(Array,Dim,sum,product);
}
int main(void)
{
float a[]={1,2,3};
printf("%d",MaxProductSum(a,3,0,1));
return 0;
}
Σημείωση: Το μήνυμα αυτό γράφτηκε 12 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Πληροφορικάριος
Δραστήριο μέλος
#include<iostream>
using namespace std;
int MaxProductSum(float *Array,int Dim,float sum,float product)
{
sum+=Array[--Dim];//1η επανάληψη sum=12,2η επανάληψη sum=13//
product*=Array[Dim];//1η και 2η επανάληψη 20//
if(Dim==0)//1η επανάληψη ψευδής,2η επανάληψη αληθής//
{
if(sum<product)//13<20//
return(-1);
else
return(1);
}
else
MaxProductSum(Array,Dim,sum,product);
}
int main(void)
{
float a[]={1,2,3},sum=10,product=10;
cout<<MaxProductSum(a,2,sum,product)<<endl;
return 0;
}
Τι θες να κάνει η συνάρτηση;
Πάντως το παραπάνω σωστα μου επιστρέφει -1
Σημείωση: Το μήνυμα αυτό γράφτηκε 12 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
-
Το forum μας χρησιμοποιεί cookies για να βελτιστοποιήσει την εμπειρία σας.
Συνεχίζοντας την περιήγησή σας, συναινείτε στη χρήση cookies στον περιηγητή σας.