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

Προβλημα σε προγραμμα C


koslibpro

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

Δημοσ.

καλημερες,

 

ειμαι νεος σχετικα στον προγραμματισμο με C.θελω να φτιαξω κυριως για εξασκηση ενα προγραμματακι που να εχει καποιες σταθερες(POINTA,POINTB,POINTC,POINTD) να ειναι ισες με FALSE και οταν γινονται TRUE να βγαζει μυνημα αντιστοιχο που μμ ας πυμε να με ειδοποιει..

ο κωδικας ειναι ο ακολουθος:

 

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

/**Adding the STABLES**/
#define false 0
#define true 1
#define or ||


/**Adding the variables**/
int i;
int POINTA,POINTB,POINTC,POINTD;

/** Starting the main application**/

int main(void){

POINTA==0;
POINTB==0;
POINTC==0;
POINTD==0;
    		
printf("\n\ttraining programm");

printf("\n\t====================");

/**Arxh ths epanalhpshs.To programma 8a ektelestei mexri to i na ginei iso me thn orismenh timh**/

for(i=1;i<5;i++);
{//for is starting

if(POINTA==1|| POINTB==1 || POINTC==1 || POINTD==1){
printf("\nsomething changed");

system("pause");
}
else {
printf("\nEverythng is the same");
}

}//ends for
system("PAUSE");

return 0;
}//end of the programm

 

 

 

 

Στο compiling ομως μου βγαζει τα εξης errors:

 

home@ubuntu-laptop:~/Desktop$ gcc main.c

main.c: In function ‘main’:

main.c:30:8: error: expected ‘(’ before ‘{’ token

home@ubuntu-laptop:~/Desktop$

 

οποτε εμενα οι αποριες μου ειναι:δεν καταλαβαινω καν τι θελει να με πει αυτο και πως να ο αντιμετωπισω>expected ‘(’ before ‘{’ token

 

καθε απαντηση καλοδεχουμενη,καλο απογευμα:)

 

ενταξει παιδια,το βρηκα το προβλημα και το διορθωσα:)

Δημοσ.

Διορθωνω κι εξηγω:

 

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

/**Adding the STABLES**/
#define false 0
#define true 1
// #define or || /* γιατι? τι κακο εχει το ||?


/**Adding the variables**/ // γιατι globals?
int i;
int POINTA,POINTB,POINTC,POINTD;

/** Starting the main application**/

int main(void){
   int i,
       POINTA,
       POINTB,
       POINTC,
       POINTD;

/* διπλο ισων ( == ) βαζουμε για να συγκρινουμε
POINTA==0;
POINTB==0;
POINTC==0;
POINTD==0;
*/
// μαλλον ηθελες κατι τετοιο
   POINTA = POINTB = POINTC = POINTD = 0;

   printf("\n\ttraining programm");

   printf("\n\t====================");

/**Arxh ths epanalhpshs.To programma 8a ektelestei mexri to i na ginei iso me thn orismenh timh**/
/* απο εδω και κατω δεν καταλαβαινω τι θες να κανεις
   αν θες πες μου να σε βοηθησω... */

   for(i=1;i<5;i++) {

       if(POINTA==1|| POINTB==1 || POINTC==1 || POINTD==1){
           printf("\nsomething changed");
       }
       else {
           printf("\nEverythng is the same");
       }

   }//ends for

   system("PAUSE"); //καλυτερα εδω, να μην βαζεις "pause" μεσα σε επαναληψεις
   return 0;
}//end of the programm

Δημοσ.

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

 

που λες τα POINTs υπεθεσα πως θα ειναι παγιδες σε συστημα συναγερμου.Οποτε οταν καποιο radar εδειχνε οτι δεν ηταν FALSE,δηλαδη αναβσε η οπως αλλιως θελεις πες το,θα εδειχνε ενα μυνημα ας πουμε που θα με ειδοποιουσε οτι κατι αλλαζε.Θα μου πεις αφου ρε δεν εχεις καμια εισοδο,πως περιμενεις να αλλαξει το FALSE να γινει TRUE,χωρις τιποτα να το επηρεαζει?

οντως,αυτο το τμημα του κωδικα ομως αντιστοιχει σε ενα main.c αρχειο ενω η λειτουργια του "συναγερμου" καθοριζεται απο ενα function.c αρχειο,οπου και αλλαζει η μεταβλητη POINTταδε απο FALSE σε ΤΡUE.

 

εδω>>

>
/* διπλο ισων ( == ) βαζουμε για να συγκρινουμε
POINTA==0;
POINTB==0;
POINTC==0;
POINTD==0;
*/
// μαλλον ηθελες κατι τετοιο
   POINTA = POINTB = POINTC = POINTD = 0;

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

 

κατι τελευταιο,μου ηρθε η ιδεα τωρα που ταξιδευα νασυνδεσω το προγραμματακι μου αυτο με μια καμερα,και οταν κατι κινειται μεσα στην καμερα,τοτε επισης να βγαζει alert.

γινεται αυτο?ειναι δυσκολο?εχεις κατι υποψιν σου..?

 

ευχαριστω ειλικρινα πολυ!

 

Δημοσ.

κατι τελευταιο,μου ηρθε η ιδεα τωρα που ταξιδευα νασυνδεσω το προγραμματακι μου αυτο με μια καμερα,και οταν κατι κινειται μεσα στην καμερα,τοτε επισης να βγαζει alert.

γινεται αυτο?ειναι δυσκολο?εχεις κατι υποψιν σου..?

 

ευχαριστω ειλικρινα πολυ!

Γινετε, πχ μπορεις να περνεις ενα screenshot καθε 30 δευτερολεπτα και να το συγκρινεις με το προηγομενο.

Βεβαια αυτο ειναι ενα πολυ καλο προγραμμα. Check it ;)

Δημοσ.

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

Δημοσ.

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

 

που λες τα POINTs υπεθεσα πως θα ειναι παγιδες σε συστημα συναγερμου.Οποτε οταν καποιο radar εδειχνε οτι δεν ηταν FALSE,δηλαδη αναβσε η οπως αλλιως θελεις πες το,θα εδειχνε ενα μυνημα ας πουμε που θα με ειδοποιουσε οτι κατι αλλαζε.Θα μου πεις αφου ρε δεν εχεις καμια εισοδο,πως περιμενεις να αλλαξει το FALSE να γινει TRUE,χωρις τιποτα να το επηρεαζει?

οντως,αυτο το τμημα του κωδικα ομως αντιστοιχει σε ενα main.c αρχειο ενω η λειτουργια του "συναγερμου" καθοριζεται απο ενα function.c αρχειο,οπου και αλλαζει η μεταβλητη POINTταδε απο FALSE σε ΤΡUE.

 

εδω>>

>
/* διπλο ισων ( == ) βαζουμε για να συγκρινουμε
POINTA==0;
POINTB==0;
POINTC==0;
POINTD==0;
*/
// μαλλον ηθελες κατι τετοιο
   POINTA = POINTB = POINTC = POINTD = 0;

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

 

κατι τελευταιο,μου ηρθε η ιδεα τωρα που ταξιδευα νασυνδεσω το προγραμματακι μου αυτο με μια καμερα,και οταν κατι κινειται μεσα στην καμερα,τοτε επισης να βγαζει alert.

γινεται αυτο?ειναι δυσκολο?εχεις κατι υποψιν σου..?

 

ευχαριστω ειλικρινα πολυ!

 

 

Με την C που γνωρίζεις, αυτό που θέλεις να κάνεις είναι αδύνατο. Ξεκίνα απο ΠΟΛΥ μικρότερα projects, για να αποκτήσεις εμπειρία πάνω στη γλώσσα, και μετά σιγά-σιγά αυξάνεις το μέγεθος και την δυσκολία το projects...

Δημοσ.

σωστα,νομιζω poscaman πως εχεις δικιο..απλα μου αρεσε ως ιδεα,κολησα και γιαυτο ηθελα και να την υλοποιησω..

 

εχεις κατα νου αλλα μικροτερα projects να μου προτινεις..?απο τοτε πχ π αρχισες εσυ να μαθαινεις προγραμματισμο σε C..

Δημοσ.

σωστα,νομιζω poscaman πως εχεις δικιο..απλα μου αρεσε ως ιδεα,κολησα και γιαυτο ηθελα και να την υλοποιησω..

 

εχεις κατα νου αλλα μικροτερα projects να μου προτινεις..?απο τοτε πχ π αρχισες εσυ να μαθαινεις προγραμματισμο σε C..

 

 

Αυτό που ζητάς να κάνεις, μπορείς να το κάνεις απλά με το Processing. Είναι ένα ελεύθερο "περιβάλλον" που χρησιμοποιεί μία γλώσσα "παραλλαγή" της Java.

 

Δεν είναι τίποτα δύσκολο και μέσα από αυτό μπορείς να μάθεις αρκετά για προγραμματισμό. Έχει αρκετές βιβλιοθήκες που κάνουν αρκετά "eye candy" πράγματα. Αυτό με την αυτόματη αναγνώριση κίνησης, νομίζω πως είναι ήδη υλοποιημένο σε κάποια βιβλιοθήκη του.

 

 

Δες το.

Δημοσ.

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

 

Πολύ καλή η ιδέα του nilosgr!!!!

 

Θα μετατρέπεις τα screenshots της στιγμής ta και της στιγμής tp σε αρχεία κειμένου αναλύοντας όλα τα pixels τους (δηλ. το χρώμα κάθε pixel p(x,y) = κωδικός χρώματος).

Αν Scr(ta) <> Scr(tp) υπάρχει κίνηση στην οθόνη.... μπορείς να υπολογίζεις και πόσα pixels είναι διαφορετικά έτσι ώστε να καταλάβεις και το μέγεθος του αντικειμένου.

Δημοσ.

...ή θόρυβος από τον Mr. Camera! ;)

 

πως ομως μπορεις να ελεγχεις τον θορυβο της οθονης..?λογικα με τον ιδιο τροπο που ελεγεχεις το scr(ta)<>scr(tp).Ή οχι ετσι..?

 

Πολύ καλή η ιδέα του nilosgr!!!!

 

Θα μετατρέπεις τα screenshots της στιγμής ta και της στιγμής tp σε αρχεία κειμένου αναλύοντας όλα τα pixels τους (δηλ. το χρώμα κάθε pixel p(x,y) = κωδικός χρώματος).

Αν Scr(ta) <> Scr(tp) υπάρχει κίνηση στην οθόνη.... μπορείς να υπολογίζεις και πόσα pixels είναι διαφορετικά έτσι ώστε να καταλάβεις και το μέγεθος του αντικειμένου.

Μπορεις να με βοηθησεις λιγο περισσοτερο με αυτο..?

Δημοσ.

πως ομως μπορεις να ελεγχεις τον θορυβο της οθονης..?λογικα με τον ιδιο τροπο που ελεγεχεις το scr(ta)<>scr(tp).Ή οχι ετσι..?

 

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

Μελέτησε διάφορα screenshots χωρίς κίνηση για να δεις πόσα pixels είναι η διαφορά τους. Όταν θα περάσει από το πεδίο της κάμερας κάποιο αντικείμενο η διακύμανση θα είναι πολύ μεγαλύτερη.

Δημοσ.

Τα βηματα ειναι καπος ετσι:

Παιρνεις ενα κομματι βιντεο ->

παιρνεις ενα frame ανα χ ->

αποσυμπιεζεις το frame ->

τωρα εχεις ενα raw image δηλαδη ενα array που ειναι ετσι

color color color color color stride

color color color color color stride

...

αυτο θα το μετατρεψεις σε 2d array αναλογα το stride

 

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

Για να το κανεις αυτο σε C θελεις:

Ενα sdk για αποσυμπιεση εικονας πχ http://www.ijg.org/

Ενα sdk για να παιρνεις το stream απο τη καμερα πχ DirectX show για ολες της καμερες ή το εκαστοτε sdk της καμερας

Δημοσ.

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

Για να το κανεις αυτο σε C θελεις:

Ενα sdk για αποσυμπιεση εικονας πχ http://www.ijg.org/

Ενα sdk για να παιρνεις το stream απο τη καμερα πχ DirectX show για ολες της καμερες ή το εκαστοτε sdk της καμερας

 

+

Αλγόριθμο εύρεσης απόστασης ( οποίος θα δέχεται σαν είσοδο επεξεργασμένη "εικόνα" - πίνακα, συνήθως μέσω PCA)

Αλγόριθμο κατηγοριοποίησης.

Δημοσ.

Μπορεις να με βοηθησεις λιγο περισσοτερο με αυτο..?

 

Δεν έχω ασχοληθεί ποτέ με αυτό το πρόβλημα αλλά έχω ένα πρόγραμμα για αντιγραφή της οθόνης.

 

 

>
$INCLUDE "RAPIDQ.INC"
DECLARE FUNCTION Setfocus Lib "user32" Alias "SetFocus"(hwnd As Long) AS LONG
DECLARE FUNCTION GetActiveWindow Lib "user32" ALIAS "GetActiveWindow"() As Long
DECLARE FUNCTION GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, _
ByVal lpString As String, ByVal cch As Long) As Long
DECLARE FUNCTION GetWindowDC LIB "user32" ALIAS "GetWindowDC"_
                (hWnd AS LONG) AS LONG
DECLARE FUNCTION BitBlt LIB "gdi32" ALIAS "BitBlt" _
                (hDC AS LONG, nXDest AS LONG, nYDest AS LONG, _
                nWidth AS LONG, nHeight AS LONG, hDCSrc AS LONG, _
                nXSrc AS LONG, nYSrc AS LONG, dwRop AS LONG) AS LONG
DECLARE FUNCTION ReleaseDC LIB "user32" ALIAS "ReleaseDC"_
                (hWnd AS LONG, hDC AS LONG) AS LONG
DECLARE SUB Copy_btn_click (Sender AS QBUTTON)
CONST SRCCOPY = &HCC0020

DIM hWnd as LONG
DIM DC AS LONG
DIM Bitmap AS QBITMAP
DIM SaveFile AS STRING
DIM i AS INTEGER, j AS INTEGER
DIM CaptureFile AS STRING
   CaptureFile = "Capture01.bmp"
DIM backcolor AS LONG        
   backcolor = &HFFFFFF  

CREATE Form AS QFORM
   Caption = "Rapid-Q, Screen Capture Program"
   Left = 0
   Top = 0
   Width = 320
   Height = 120
   Color = backcolor
   WindowState = 0
   BorderStyle = 1
   delBorderIcons(2)
   
   CREATE Image1 AS QIMAGE  
       Left = 0
       Top = 0
       Width = 30
       Height = 30
       Visible = 0
   END CREATE

   CREATE Label1 AS QLABEL
       Caption = "Save screen as :"
       Left = 10
       Top = 16
       Width = 80
       Height = 30
   END CREATE 
   
   CREATE Edit1 AS QEDIT
       Text = CURDIR$+"\"
       Left = 95
       Top = 16
       Width = 200
       Height = 30
   END CREATE 
   
   CREATE Button1 AS QBUTTON
       Caption = "Ok"
       Left = 10
       Top = 48
       OnClick = Copy_btn_click
   END CREATE
END CREATE

       Edit1.text = Edit1.Text + CaptureFile
       SetFocus(Button1.Handle)
       Form.ShowModal

SUB Copy_btn_click (Sender AS QBUTTON)
   
   Button1.Visible = 0
   Label1.Visible = 0
   Edit1.Visible = 0
   Form.Visible = 0

   For i = Form.Left to Form.Left + Form.ClientWidth
   For j = Form.Top  to Form.Top + Form.ClientHeight
   Next 
   Next

   hWnd = GetDesktopWindow()
   DC = GetWindowDC(hWnd)
         
   Bitmap.Width = Screen.Width
   Bitmap.Height = Screen.Height
   BitBlt(Bitmap.Handle, 0, 0, Bitmap.Width, Bitmap.Height, DC, 0, 0, SRCCOPY)
   ReleaseDC(hWnd, DC)
   SaveFile = Edit1.Text
   bitmap.SaveToFile(SaveFile) 
   
   Image1.Autosize=1
   Image1.Visible=1
   Image1.BMP= Edit1.text 
   Form.Caption = "Bitmap file,  " + Edit1.text
   Form.BorderStyle = 2
   Form.Visible=1

END SUB

 

 

 

 

Κάπως έτσι αντιγράφεις την εικόνα

 

>
SUB Copy_Click
for i=Image1.left to Image1.left+Image1.Width
   for j=Image1.top to Image1.top+Image1.Height
       if j<Image1.top+Image1.Height and i<Image1.left+Image1.Width then 
       z%=doevents()
       Richedit1.addstrings "p(" +str$(cnt_line)+ ")=" +chr$(34)+str$(Form.Pixel(i,j))+chr$(34)
       p(cnt_line)=str$(Form.Pixel(i,j))
       cnt_line = cnt_line+1
       Form.Pixel(i,j) = &HFFFFFF
       end if
    next
next    

END SUB

 

 

και έτσι θα κάνεις redraw

 

>
SUB Redraw    
k=0
for i=Image1.left to Image1.left+Image1.Width-1
   for j=Image1.top to Image1.top+Image1.Height-1
       Form.Pixel(i,j) = val(p(k))
       k=k+1
   next
next

END SUB

Αρχειοθετημένο

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

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