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

Εργασία στην C


rafail1994

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

Ωραία μια χαρά τώρα κατάλαβα τι παίζει ευχαριστώ .

Δεν υπάρχει και διαφορετικός τρόπος να ορίσεις μια μεταβλητή και με μια εντολή να του "πεις" ότι δεν θέλεις να μεταβληθεί ;( νομίζω οτι υπάρχει μια εντολή αλλά δεν μπορώ να την θυμηθώ τώρα )

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

  • Απαντ. 130
  • Δημ.
  • Τελ. απάντηση

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

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

Δημοσιευμένες Εικόνες

Παρακαλώ!

 

Ναι, υπάρχει η const ...

const int maxInput = 512+1;

υπάρχουν υπέρ και κατά και για τις 2 εναλλακτικές, τα οποία ελπίζω να σας τα διευκρινίσουν αργότερα στην σχολή σου.

 

Για παράδειγμα, στην προκειμένη περίπτωση που την MAX_INPUT την χρησιμοποιώ για να ορίσω τον πίνακα input[MAX_INPUT] (που είναι string βασικά) και τον αρχικοποιώ κιόλας, δεν μας κάνει η const.

 

Υπάρχει επίσης και το enum. Θα τα δείτε αργότερα υποθέτω.

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

Ακριβως.

 

 

 
#include<stdio.h>
int main(void)
{
    
    const int len = 2;
    
    char a[len] = "a";
    
    puts(arr);

return 0;
}
 

 

http://stackoverflow.com/questions/10129410/gcc-complains-variable-sized-object-may-not-be-initialized

 

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

 

The only way for type a to not be a VLA is for size to be an integer constant expression (§6.7.5.2). What you have there is not an integer constant expression, so you have a VLA

 

 

 

 


 

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

Ναι αυτήν έλεγα ωραία !! .Από ότι είδα μέσα σε αυτήν την εβδομάδα θα τα κάνουμε και αυτά γιατί έχω και άλλη εργασία που χρειάζονται από ότι είδα .

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

  • 3 εβδομάδες αργότερα...

Όποιος έχει όρεξη ας δώσει μια λύση (ήταν εργασία προηγουμένης εβδομάδας που δεν κατάφερα να την λύσω ολοκληρωμένα ,να δω πως λυνεται επιτελους :P)

 

 

Σε ένα γράφημα που αποτελείται από Ν κορυφές, οι κορυφές του αριθμούνται από το 0 έως το Ν-1. Οι κορυφές του γραφήματος συνδέονται με ακμές κάθε μια από τις οποίες έχει ένα ορισμένο βάρος. Για το γράφημα αυτό ζητείται, εκκινώντας από μια δεδομένη κορυφή, να βρεθεί ένα μονοπάτι που να περνά, τουλάχιστον μια φορά, από κάθε κορυφή του και να έχει το ελάχιστο κόστος. Ως κόστος για το μονοπάτι θεωρείται το άθροισμα των βαρών των ακμών από τις οποίες αυτό θα περάσει.

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

Να γραφεί το πρόγραμμα που να υλοποιεί τον πιο πάνω αλγόριθμο. Στο πρόγραμμα να οριστεί ο πίνακας, δύο διαστάσεων, adj με Ν γραμμές και Ν στήλες. Ως τιμή για το στοιχείο adj[i][j] του πίνακα και για i=0,…,N-1 και j=0,…,N-1, να δοθεί η τιμή 1 αν υπάρχει ακμή που να συνδέει την κορυφή i με την κορυφή j διαφορετικά ως τιμή για το adj[i][j] να δοθεί το 0. Στο πρόγραμμα να οριστεί ακόμη και ο πίνακας, δύο διαστάσεων, weight με Ν γραμμές και Ν στήλες. Ως τιμή για το στοιχείο weight [i][j] του πίνακα και για i=0,…,N-1 και j=0,…,N-1, να δοθεί το βάρος της ακμής που συνδέει την κορυφή i με την κορυφή j στην περίπτωση που υπάρχει ακμή που να συνδέει τις δυο κορυφές.

Το πρόγραμμα να διαβάζει τα απαραίτητα στοιχεία και να σχηματίζει τους πίνακες adj και weight. Στη συνέχεια να διαβάζει τον αριθμό της κορυφής εκκίνησης και εφαρμόζοντας των αλγόριθμο, να βρίσκει και να τυπώνει το μονοπάτι και το αντίστοιχο βάρος.

Βοηθητικές παρατηρήσεις 

 Για τη διαγραφή μιας ακμής από το γράφημα να δίνεται η τιμή 0 στο αντίστοιχο στοιχείο του πίνακα adj.

 

 

 

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

Ξεκινας από μια κορυφη στην αμεσως κοντινότερη , προσθέτεις την αποσταση, τις αποσυνδεεις, και συνεχιζεις απ αυτην μετά. αν δεν έχεις γειτονικές ή αν τις επισκευτηκες όλες σταμάτα.

Δεν είναι ουτε βέλτιστος , ουτε έχει λύση πάντα ( κ' ας είναι συνδεμένος ο γράφος).

Αν έχω χρόνο θα γράψω το βράδυ κώδικα.

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

Djikstra κλπ έχετε κάνει; rafail σε τι σχολή είσαι αν επιτρέπεται;

 

Όχι δεν έχουμε κάνει .Ηλεκτρολόγος μηχανικός

 

Μονο εγω δεν μπορω να καταλαβω την εκφωνηση;

 

Γενικά όλες του η εκφωνήσεις είναι δυσνόητες πρέπει να φας μια ταλαίπωρα για να βγάλεις άκρη

 

Ξεκινας από μια κορυφη στην αμεσως κοντινότερη , προσθέτεις την αποσταση, τις αποσυνδεεις, και συνεχιζεις απ αυτην μετά. αν δεν έχεις γειτονικές ή αν τις επισκευτηκες όλες σταμάτα.

Δεν είναι ουτε βέλτιστος , ουτε έχει λύση πάντα ( κ' ας είναι συνδεμένος ο γράφος).

Αν έχω χρόνο θα γράψω το βράδυ κώδικα.

 

Ναι στην αμέσως κοντινότερη κορυφή αλλά η ακμή του να έχει το μικρότερο βάρος .!

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

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

Έφτιαξα ενα πινάκα dist[NxN] με τιμή του dist[i,j] το βάρος της ακμής που συνδέει τις κορυφες i και j , αν δεν συνδέονται αμεσα τότε ειναι 0.

Ο πίνακας πρέπει να είναι συμμετρικός αφού dist[i,j]=dist[j,i] , επίσης dist[i,i]=0.

Σε κάθε επίσκεψη απο i σε j κόβω τη σύνδεση i---j. ( dist[i,j]=dist[j,i]=0;) όπως το ζητάει η άσκηση για να μην μπορώ να πάω ξανα πίσω.

Ολο αυτό μέχρι να επισκεφτώ όλες ή μείνω σε κάποια κορυφή χωρίς γειτονες 

 

To έκανα σε C# και αντί για 2 πινακες (adj και weight) ένα dist και ένα μονοδιάστατο με τις κορυφές που επισκέφτηκα.

int N = 4;
            int[,] dist = new int[4, 4]  // prepei dist[i,j]=dist[j,i]
            {
                  {0,1,2,4},
                  {1,0,2,3},
                  {2,2,0,3},
                  {4,3,3,0},
            };

            int k = 0;
            int sumDist = 0;
            bool[] visited = new bool[N];
            int v = 1;
            visited[0] = true;
            while(v < N)
            {
                int minDist = 1000000000;
                int closestIndex = -1;
                for(int i = 0; i < N; i++)
                {
                    if(k == i || dist[k, i] == 0)
                        continue;
                    else if(dist[k, i] < minDist)
                    {
                        closestIndex = i;
                        minDist = dist[k, i];
                    }
                }

                if(closestIndex > -1)
                {
                    dist[k, closestIndex] = dist[closestIndex, k] = 0; //kopse tis syndeseis
                    sumDist += minDist ;
                    k = closestIndex;
                    if(!visited[closestIndex])
                        v++;
                    visited[closestIndex] = true;
                }
                else // apokomenh koryfi
                {
                    Console.WriteLine("error");
                    break;
                }
            }

            Console.WriteLine(sumDist);
Επεξ/σία από albNik
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Έχω έναν δισδιάστατο πίνακα π.χ A[5][5] και θέλω να γεμίσω αυτόν τον πίνακα με τυχαίους αριθμούς αλλά αυτοί οι τυχαίοι αριθμοί να βρίσκονται σε ένα διάστημα π.χ (10,90) πως θα γίνει ;

 

Με αυτόν τον τρόπο γεμίζω τυχαίους αριθμούς αλλά όχι σε κάποιο διάστημα

#include <stdio.h>
#include <stdlib.h>
#define N 5

int main()
{
  int i,j,A[N][N];
  
  for(i=0; i<N; i++)
  {
     for(j=0; j<N; j++)
     {
        A[i][j]=rand();
     }
  }                 
  for(i=0; i<N; i++)
  {
     for(j=0; j<N; j++)
     {
        printf("%d\n",A[i][j]);
     }
  }
  system("PAUSE");	
  return 0;
}

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

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

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

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

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

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

Σύνδεση

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

Συνδεθείτε τώρα

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