Prevod z dvojkovej sustavy do desiatkovej
Moderátori: psichac, Moderátori
- bobo87
- Ultimate člen
- Príspevky: 1915
- Dátum registrácie: 15 Feb 2007, 00:00
- Vek: 36
- Kontaktovať používateľa:
Re: Prevod z dvojkovej sustavy do desiatkovej
peterple - #include <stdint.h>
0
float l,I,Q,_,o;int E;main(){I=1.125;while(I>=-1.225){for(l=-2;l<=1;l+=3/79.0){Q=_=0;for(E=127;Q*Q+_*_<4.0&&--E>32;){o=Q;Q=Q*Q-_*_+l;_=2*o*_+I;}putchar(E);}putchar(10);I-=9/88.0;}}
Re: Prevod z dvojkovej sustavy do desiatkovej
Ahojte trosku som studoval bitove polia v C a vyriesil som to takto
#include "stdafx.h"
typedef struct {
unsigned pole2 : 8;
unsigned pole1 : 8;
unsigned pole0 : 8;
} frekvencia;
int _tmain(int argc, _TCHAR* argv[])
{ unsigned int pole[2];
pole[0]=152;// 0....7
pole[1]=150; // 8.....15
pole[2]=128; // 16 .....23
frekvencia a = {pole[2], pole[1], pole[0]};
printf("%u",a);
getchar();
return 0;
}
pole 0...2 budu prijate data a zlucim ich do jednej premenej a netreba ziadne posuvanie ani rozne logicke operacie
#include "stdafx.h"
typedef struct {
unsigned pole2 : 8;
unsigned pole1 : 8;
unsigned pole0 : 8;
} frekvencia;
int _tmain(int argc, _TCHAR* argv[])
{ unsigned int pole[2];
pole[0]=152;// 0....7
pole[1]=150; // 8.....15
pole[2]=128; // 16 .....23
frekvencia a = {pole[2], pole[1], pole[0]};
printf("%u",a);
getchar();
return 0;
}
pole 0...2 budu prijate data a zlucim ich do jednej premenej a netreba ziadne posuvanie ani rozne logicke operacie
0
-
- Ultimate člen
- Príspevky: 2328
- Dátum registrácie: 25 Jún 2013, 21:06
- Bydlisko: Krajné
- Vek: 57
- Kontaktovať používateľa:
Re: Prevod z dvojkovej sustavy do desiatkovej
máš tam malá chybičku. Deklaruješ pole dlhé 2 prvky ale používaš 3. Čudujem sa že to v zásobníku nerobí problém. Poradie bitov máš tiež nejak divne. (Opačne)
Potom len ako optimalizácia - stačilo by pole typu char (na PC je ale pamete mraky takže je to fuk)
Jasne že sa to dá všelijako. Tu máš iný spôsob, bez ďalšej pomocnej premennej, bez rotácií a log operácii.
Ale nevýhoda tohoto hacku (a asi aj toho tvojho) je že je závislý na platforme a implementácii kompilátora
Potom len ako optimalizácia - stačilo by pole typu char (na PC je ale pamete mraky takže je to fuk)
Jasne že sa to dá všelijako. Tu máš iný spôsob, bez ďalšej pomocnej premennej, bez rotácií a log operácii.
Kód: Vybrať všetko
#include "stdio.h"
int main(int argc, char* argv[])
{
unsigned char pole[4];
pole[3]=0; // 31....24
pole[2]=152; // 23....16
pole[1]=150; // 15.....8
pole[0]=128; // 7......0
printf("%u", *(unsigned int* )pole);
getchar();
return 0;
}
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.
Re: Prevod z dvojkovej sustavy do desiatkovej
Dumitru na zaciatok je to dobre, vidno ze si studoval. Preto ti nenapisem konkretne riesenie, ale iba naznacim.
Pre pretypovanie je vhodnejsie pouzit "union".
Skus sa este pozriet na pointre - aj to je prostriedok pre teba.
Neviem pre aky procesor to pises, ale vo vyslednom kode je lepsie pouzit tie posuvy, pripadne nasobenie.
Pre pretypovanie je vhodnejsie pouzit "union".
Skus sa este pozriet na pointre - aj to je prostriedok pre teba.
Neviem pre aky procesor to pises, ale vo vyslednom kode je lepsie pouzit tie posuvy, pripadne nasobenie.
0
Re: Prevod z dvojkovej sustavy do desiatkovej
No zatial mam len taku hruby navrh komunikacie s generatorom uvadzam tu kod v C je velmi nedokonaly podla mna takze navrhy alebo rady na vylepsenie by som prijal
Kód: Vybrať všetko
#include "stdafx.h"
#include "windows.h"
int _tmain(int argc, _TCHAR* argv[])
{
// *******************************************1.otvaranie portu******************************************************************
HANDLE hCom;// inicializacia premeny hCom
hCom=CreateFile(TEXT("COM4")// vyber portu
,GENERIC_READ|GENERIC_WRITE//otvorenie portu pre zapisovanie
,0// pristup k portu nie je mozni viac ako jeden preto 0
,NULL//ochrana-pri normalnej praci nie je zapotreby
,OPEN_EXISTING//sam vytvori subor
,NULL//asinchrona praca
,NULL);
if(hCom==INVALID_HANDLE_VALUE)// ak funkcia vyhodi tuto hodotu sa port neotoril
printf("chyba portu\n");
else
printf("Port sa otvoril\n");
//*******************************************Nastavenie parametrov***************************************************************
DCB dcb={0};
if(!GetCommState(hCom,&dcb))//otvori pre incializaciu a zapis do struktury DCB
printf("chyba inicalizovania struktury DCB\n");
else
printf("Inicializacia DCB prebehla v poriadku\n");
printf("BaudRate=%d\n",dcb.BaudRate=57600);
printf("ByteSize=%d\n",dcb.ByteSize=8);
printf("Parity=%d\n",dcb.Parity=0);
printf("StopBits=%d\n",dcb.StopBits=ONESTOPBIT);
if(!SetCommState(hCom,&dcb))//ulozi parametre do struktury DCB
printf("chyba nastavenia parametrov\n");
else
printf("parametre sa nastavily\n");
if(!SetCommMask(hCom, EV_RXCHAR))
printf("chyba nastavenia masky");
vratsa:
//**************************************************citanie z portu****************************************************************
DWORD dwCommEvent, dwRead,dwErrors,cbInQue;
COMSTAT comStat;
char chRead[230];int dl;
Sleep(1000);
ClearCommError(hCom, &dwErrors, &comStat);
printf("%d\n",comStat.cbInQue); // vypise pocet prijatych znakov to len pre kontrolu :)
dl=comStat.cbInQue;
if(ReadFile(hCom, &chRead,dl,&dwRead, NULL))
for (int i=0;i<dl;i++)
printf("%c",chRead[i]);
else{
printf("chyba čitania\n");
}
//**************************************************zapis do portu****************************************************************
DWORD Pocet=0;
int dlzka=0,check=0;
char Data[10];
printf("\nzadaj prikaz\n");
scanf("%s",&Data);
getchar();
dlzka=strlen(Data)+2;
Data[dlzka-2]='\r';
Data[dlzka-1]='\n';
//for( int i=0;i<dlzka;i++){
WriteFile(hCom,&Data,dlzka,&Pocet,NULL);
if(Pocet!=dlzka)
printf("\n Chyba: Zapis na port sa nepodaril.\n");
//}
goto vratsa;
getchar();
CloseHandle(hCom);
return 0;
}
0
Re: Prevod z dvojkovej sustavy do desiatkovej
hmmm.... tazko sa to luska - skus to dat ako <code>
prvy postreh - vyhni sa goto
prvy postreh - vyhni sa goto
0
Re: Prevod z dvojkovej sustavy do desiatkovej
este mam otazku staci len poradit funkciu ako spravit ak mam nekonecny ciklus for(;;){} alebo while(1){} a chcem tam iplementovat to ze napriklad na zaciaku napisem uzivatelovi ak chcete program ukoncit zatlacte ESC to ma asci hodnotu 27 tusim a dalej to nespominam a ani od neho nepozadujem ale ako nahle pouzivatel stlaci ESC tak vyskoci sa z ciklu, ja to viem len pomocou scanf a potom porovnavat ci stlacil alebo nie ale to sa ho musim stale pitat ale ja to chcem nech program si bezi a robi co ma ale ako nahle sa rozhodne ho ukoncit zatlaci ESC a koniec
0
Re: Prevod z dvojkovej sustavy do desiatkovej
mno priamo ti nenapisem prikazy, priznam sa momentalne nerobim cez konzolu, take detaily bych musel odkusal ale princip:
naznacil som princip - netestovane
cyklus sa bude opakovat dovtedy, kym nie je vysledok testu false
Kód: Vybrať všetko
unsigned char znak = 0;
do{
.. prikazy
znak = getch(); // scanf, alebo getch, podla toho, ako sa to sprava v konzole a cii cakas na enter
} while(znak != chr(27));
cyklus sa bude opakovat dovtedy, kym nie je vysledok testu false
0
Re: Prevod z dvojkovej sustavy do desiatkovej
este posledna otazka slubujem ak prijdu data vypisu sa na obrazovku ako spravim to ze ked mi prijdu nove data aby sa len prepisali na miesto tych starych
0
-
- Ultimate člen
- Príspevky: 2328
- Dátum registrácie: 25 Jún 2013, 21:06
- Bydlisko: Krajné
- Vek: 57
- Kontaktovať používateľa:
Re: Prevod z dvojkovej sustavy do desiatkovej
ak je to v tom istom riadku tak ľahko. Dáš CR (návrat voza) bez LF (posun riadok) Tak sa dostaneš na začiatok toho istého riadka a môžeš ho prepísať novými znakmi.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.
Re: Prevod z dvojkovej sustavy do desiatkovej
čaute síce to sem nepatri ale nebudem zakladať novu tému začal som zo štúdiom TCP/IP zatiaľ len taký jednoduchý server ale nejde teda neotvori mi socket vždy vyhodí chybu nerozumiem prečo ale na 100% robím dačo zle môžte poradiť kde to čo je zle pretože neviem sam nájsť chybu
- Prílohy
-
- New Text Document (2).txt
- (919 Bajtov) 35 stiahnutí
0
- dxr
- Ultimate člen
- Príspevky: 3968
- Dátum registrácie: 05 Aug 2013, 20:21
- Bydlisko: V strede nicoho
- Kontaktovať používateľa:
Re: Prevod z dvojkovej sustavy do desiatkovej
Ak sa pokusas otvorit port ktory si mal otvoreny pred kratkym casom to moze byt problem
inak co tak pouzivat tie tlacitka ako je staci oznacit blok textu a potlacit a potom sa to da aj citat.
a nazvat C zdrojak new dokument.txt no to je ako napisat ypsilon za pismenom s makcenom....sorry.
inak co tak pouzivat tie tlacitka ako je staci oznacit blok textu a potlacit a potom sa to da aj citat.
a nazvat C zdrojak new dokument.txt no to je ako napisat ypsilon za pismenom s makcenom....sorry.
- Prílohy
-
- code.png (416 Bajtov) 6986 zobrazení
0
Naposledy upravil/-a dxr v 21 Máj 2015, 17:12, upravené celkom 2 krát.
Re: Prevod z dvojkovej sustavy do desiatkovej
nie nie ono mi to nešlo ani na prvý krát a keď som to debugoval aj včera aj dneska tak proste vloži tam -1 čo znamená že chyba a nechápem a to iste klient Adresu dávam 127.0.0.1 čo by malo znamenať že klient a server je na jednom PC čítal som že sa to použiva pre testovanie programu tak som chcel na server poslať číslo 1 a na Klient číslo 2 ako char ale ono mi ani neotvori
-- Spojený príspevok 21 Máj 2015, 17:13 --
a prepáč nabudúce si budem dávať pozor na ukladanie priloh
-- Spojený príspevok 21 Máj 2015, 17:13 --
a prepáč nabudúce si budem dávať pozor na ukladanie priloh
0
- dxr
- Ultimate člen
- Príspevky: 3968
- Dátum registrácie: 05 Aug 2013, 20:21
- Bydlisko: V strede nicoho
- Kontaktovať používateľa:
Re: Prevod z dvojkovej sustavy do desiatkovej
Kód: Vybrať všetko
local.sin_port = (7500);
jak ze ne mas tam fixny port - a ten neviem moze byt v stave ze sa zatvara ono to trosku trva
neviem ako tvoj stack pouzivas WINSOCKv2 ale este na XPdlach bolo treba zavolat funkciu
ktorou si povedal ze ktory stack api sa bude pouzivat - Washu hod sem ten zdrojak co som ti pred rokom poslal
ja ho uz nemam - tam to chodilo som lenivy to pisat znova
inak najprv treba spravit server tj. bindnut port potom mozes klientom otvarat ....to dufam vies.
127.0.0.1 je loopback adresa a ano pouziva sa na medzi procesovu komunikaciu vramci jedneho stroja/stacku.
0