C++ zadaci,resenja,pitanja,tutoriali

ej moze li neko da mi objasni koja je razlika izmedju :
Kod:
char* a;
// i ovoga 
char a[];

jer kada napravim klasu sa poljem npr. ime i napisem
char* ime
stalno mi gasi aplikaciju bez da prijavi gresku....neka mi neko pomogne pls :D..........i neka mi kaze kako treba da pravim niz karaktera tj. kada pravim klasu....hvala :D
 
evo mi problema.....
u klasi Racunar
Kod:
class Racunar {
      char MaticnaPloca[],Procesor[],GrafickaKartica[],HardDisk[];
      public:
             Racunar () {};
             Racunar (char a[],char b[],char c[],char d[]){
                     MaticnaPloca=a;
                     Procesor=b;
                     GrafickaKartica=c;
                     HardDisk=d;                     
             }        
             char[] UzmiMP () const {return this->MaticnaPloca;}
             char[] UzmiP () const {return this->Procesor;}
             char[] UzmiGK () const {return this->GrafickaKrtica;}
             char[] UzmiHDD () const {return this->HardDisk;}
             void PromeniGrafickuKarticu();
             void PromeniHDD();
             
             void Citaj();
             void Pisi();
             };

u Racuar.C

Kod:
#include <stdlib.h>
#include <conio.h>
#include "Racunar.h"

using namespace std;

void Racunar::PromeniGrafickuKarticu()
{
     printf("Zelite li da promenite graficku karticu? \n");
     char k;
     k=getch();
     if (k=='d') { printf("Unesite model nove kartice: \n");char m[];scanf("%s",m);this->GrafickaKartica=m;printf("Promjena kartice je izvrsena\n");}
     else printf("Promjena kartice nije izvrsena!\n");
}

void Racunar::PromeniHDD()
{
     char hdd[]=UzmiHDD();
     printf("Sadasnji HDD: %s\nDali zelite da promenite tvrdi disk?\n",hdd);
     char k;
     k=getch();
     if (k=='d') {printf("Unesite novi hdd: ");scnaf("%s",this->HardDisk;}
     else printf ("Promjena hdd-a nije izvrsena!\n"):     
}

void Racuna::Citaj()
{
     printf("Racunar ?");
     printf("\nMaticna Ploca ? "); scanf("%s",this->MaticnaPloca);
     printf("\nProcesor ? ");scanf("%s",this->Procesor);
     printf("\nGraficka kartica ? ");scanf("%s",this->GrafickaKartica);
     printf("\nHard disk ?" );scanf("%s",this->HardDisk);
}
void Racunar::Pisi()
{
     printf("Racunar: ");
     printf("Maticna ploca: %s",this->MaticnaPloca);
     printf("Procesor: %s",this->Procesor);
     printf("Graficka kartica: %s",this->GrafickaKartica);
     printf("Hard disk: %s",this->HardDisk);
}

i u main.cpp
Kod:
#include <cstdlib>
#include <iostream>
#include "Racunar.h"
using namespace std;

int main(int argc, char *argv[])
{
    Racunar n ();
    n.Citaj();
    n.PromeniGraficku();
    n.PromeniHDD();
    n.Pisi();
    system("PAUSE");
    return EXIT_SUCCESS;
}

e sada javlja mi brdo gresaka a primetim da nesto nije u redu sa poljima klase tj sa tim "char nesto[]"........uvek me je*u nizovi karaktera.....u snatdard bi trebalo uvesti i string kao osnovni tip :) xD...pomoc ??...hvala :D
 
Pa pazi char* ti je pointer ka nizu karaktera dok ti je char[] niz karaktera...Sto se tice tvog koda poprilicno sam siguran da funkcija ne moze biti tipa char[], kao sto funkcija nemoze biti niz integera ne moze biti ni niz char tipova.
Takodje imas jednu gresku u kucanju napisao si:
Kod:
{return this->GrafickaKrtica;}
I mozda si zaboravio da iskopiras ali u Racunar.h ti nedostaju predprocesorske naredbe za definsianje heder fajla.
Probaj da izmenis program tako da koristis stringove mnogo su jednostavniji za korišcene i C++ naredbe za IO. z:)
 
ej moze li neko da mi objasni koja je razlika izmedju :
Kod:
char* a;
// i ovoga 
char a[];

jer kada napravim klasu sa poljem npr. ime i napisem
char* ime
stalno mi gasi aplikaciju bez da prijavi gresku....neka mi neko pomogne pls :D..........i neka mi kaze kako treba da pravim niz karaktera tj. kada pravim klasu....hvala :D

Razlika je koliko se sec'am ta shto je char *a memorijski pointer a char[] areja koja je obichno initilizirana i terminirana po prirody (sa '\0')
Bez terminacije shtamapnje recimo pointera *a moze lako da odluta van programa shto operativni system "danas" ne dozvoljava pa prekine program uz jaku opomenu.
 
Mene zanima da vidim rutinu u Cu ili C++, koje c'e tachno da vam da koliko ste godina, meseci i dana stari na bilo koji danashnji dan. :)

Moje je solucija u PMLu koja je Java jezik bazirana je sledec'a (da sve u jednoj liniji):

godishte deda mraza <- date.difference[od=2009-07-01, do=SADA]

Problem je kada je razmak u godinama veliki ostatak u danima uslovljavaju prestupne godine i broj dana u mesecu, za ostatak sve ukupnog broja dana u razlici.
Josh radim na tome da dobijem i testiram tachan broj dana pored godina i meseca, koje je lako izrachunati.
 
Ok, nije C++ nego C, ali jezik ovde nije toliko bitan.... Problem je ovakav: Imam zadat ugao u vidu 14-bitnog podatka (rezolucija je oko 0,022deg/bitu) a treba da ga pretvorim u string oblika xxx,yy gde je xxx ceo deo ugla, a yy razlomljen. Naravno da ovo nije teško ako se radi sa podacima tipa float, odnosno double, no ovo je ZABRANJENO! Dakle samo celobrojna artitmetika dolazi u obzir. Takođe, ne dolaze u obzir ni funkcije iz math.h u slučaju da ispadaju iz koncepta celobrojne aritmetike.

Treba mi rešenje koje ima najveću moguću tačnost. U suštini, rešio sam ja taj problem, ali želim malo diskutovanjai drugačija mišljenja. Samo molim vas, držite se ograničenja: samo celobrojna aritmetika!!!
 
A sta je to....jel mikrokontroler ? posto pominjes senzore :D

el se šališ? ili si ozbiljan? Sa senzora skidam 16 bita informacija preko isp protokola (cca 150 us vremena za komunikaciju) 14 bita ugao + 2 test bita. Mikrokontroler je u suštini minijaturni samostalni računarski sitem, sa mikroprocesorom, ulazno izlaznim poseistemem (obično par 8bitnih paralelnih portova, DA konvertor, AD konvertor, serijska veza td brojači i slične džidžabidže). E sad, na serijski isp protokol imam nakačen senzor, a na jedan paralelni port LCD displej. Sistem ide vako: povučem podatke sa senzora, prepakujem ih u ugao na dve decimale, potom ugao prebacim u string pa pošaljem na displej.

Problem je naravno u mikrokontroleru:Atmega32: ima 32KB memorije za smeštanje programa, 2KB RAM memorije i radi na 16MHz. Aritmetika u pokretnom ili fiksnom zarezu je katastrofalna. Jedna promenjiva tipa double ili float pojede 5-10KB memorije pa se moram ograničiti na celobrojnu kad računam ugao.

Takođe sve operacije uključujući i komunikaciju sa senzorom treba obaviti za manje od 1ms, pa kod mora biti optimalan :D

ATmeaga32 je ovaj mikrokontroler:
images
 
Moze jedno pitanje,mozda ce zvucati glupo xD
Kako vrsite programiranje tih kontrolera,i da li ima neka dobra knjiga da se kupi u vezi sa tim?
Da li koristite asemblerski jezik prilikom programiranja tih kontrolera?

Ma nije glupo. Vrlo lako u suštini. Programi se pišu u klasičnom C jeziku koji je proširen za neka zaglavlja koja se odnose na mikrokontroler. Program se kompajlira pomoću avr-gcc kompajlera koji sve to prevodi u izvršni fajl sa komandama koje kontrolor raspoznaje. Fajl je tipa *.hex i naravno ne može se izvršavati na PC-u sem u nekom simulatoru. Nakon pravljenja fajla pomoću programa i uređaja koji se zove programator (lako se pravi u kućnoj varijanti) program se preko USB-a jednostavno upiše u memoriju kontrolera. Ključ je naravno poznavati arihetkturu mikrokontrolera, kako bi se komande u C-u pravilno napisale da program posle korektno radi.

Svaki mikrokontroler (a ima ih na stotine) obično dolazi uz podeblju dokumentaciju Atmega32 ima dokumentaciju na preko 300 strana.

Poznatiji mikrokontroleri:

su intel 8051 kompatiblni - za početnike, poštojednostavno rade i po arhitekturi liče na x86 seriju mikroprocesora, samo uprošćenu.
Atmel AVR - ima ih gomila, jednostavni brzi, najčešće ih koriste hobisti za sve i svašta.
PIC - ovo je već ozbiljnija varijanta za industrijsku primenu
NXP Philips ARM - ovo su jako ozbiljni mikrokontroleri po snazi već pariraju pentijum procesorima .

Može i u asembleru, ali je uglavnom beznadežno komplikovano. Uglavnom se to radi samo kada je u pitanju neki vremenski kritičan proces.

A lepota je u minimalizmu: spakovati ceo kod u 32KB. Nema arčenja ni memorije ni prostora.
 
Poslednja izmena:
ja sad programiram Siemens Logo! Plc......skroz je interesantno.....mogucnost da programiras nesto sto ce biti "zivo" tj. moci ce da se pomera....sada smo na projektu robotske ruko koja moze da crta krug, elipsu, liniju, trougao itd.......ne moze jos ali ce moci :D.......al uje bas interesantno :D
 
ja sad programiram Siemens Logo! Plc......skroz je interesantno.....mogucnost da programiras nesto sto ce biti "zivo" tj. moci ce da se pomera....sada smo na projektu robotske ruko koja moze da crta krug, elipsu, liniju, trougao itd.......ne moze jos ali ce moci :D.......al uje bas interesantno :D

Radio sam sa robotskim manipulatorima ABB. Jel to nei ručno pravljeni manpulator ili fabrički? I koliko stepeni slobode ima? Koja konfigruracija zglobova?

Radio sam i sa PLC-ovima, i to sa FESTO industrijskim PLC uređajima. Jezik za programiranje je blago reći nakaradan ali je krajnje prost. Pored toga petljao sam malo i sa OMRON-om i Schneider Electric plc-ima.

Inače PLC ti je u osnovi mikrokontroler sa malo jačim izlazima i periferijama. Ovaj FESTO je imao TCP/IP protokol pa se programirao preko mreže. Tipa sedeš kući, praviš program i preko web kamerice posmatraš šta se događa u bog zna gde, a preko interneta si povezan sa plc-om.

e tu leži opasan keš.
 

Back
Top