Konwersję można przeprowadzić na wiele sposobów. podaję przykład dla liczb wprowadzonych z klawiatury. #include <conio.h> #include <iostream> using namespace std; main() { char liczba_ch[10],liczba_kr[10... cout<<"podaj liczbe ";cin>>liczba_ch; int dl=strlen(liczba_ch); for(int...
Brrr, Basic. ;) Przerzuć się na C lub asemblera. Nowe AVRStudio można zintegrować z WinGCC i działa to bez zarzutów. A w C deklarujesz sobie od razu, czy masz zmienną całkowitą (char, int), czy zmiennoprzecinkową (float) i o dziwo artytmetyka zmiennoprzecinkowa nie zajmuje ogromnych ilości flasha. :)
Witam U mnie ta funkcja dtostrf zabiera sporo pamięci, napisałem własną, która zabiera 5 razy pamięci programu: //Konwersja float to str void ToString(char *dest, float value) { //format A.BB long A=0; long B=0; A=value; B=value * 100; B=B-A*100; char sA[3]; char sB[6]; itoa(A,sA,10); itoa(B,sB,10); strcat(dest,sA);...
w 12 to nwm z nauczycielem rozmawialem i albo A albo C . w 10 na 200% A kolego. CHAR!! Float to do zmiennoprzecinkowych.
Liczba: 8002930403 ma 10 cyfr, wiec raczej będziesz potrzebował bufora znaków (char *) o długości o jeden większego, by na ostatnim miejscu umieścić 0. Jednak liczba 20 000 000 000 ma 11 cyfr, więc buffor możesz odrazy zrobić na 12 znaków. Następnie możliwe że tracisz dokładność w wyniku działania tych trzech operacji: (12000000000/4095)*data.ctrl....
jeśli wykonam coś takiego : char a; int b = 775; a = (char)b; to zmienna "a" będzie zawierała pierwszych osiem bitów pochodzących ze zmiennej b ? a dokonując: b>>8; a=(char)b; do zmiennej "a" przypisze kolejne osiem bitów od 8-go do 15-go bitu ? A jak tego dokonać jeśli będą to liczby typu double czyli zmiennoprzecinkowe ?
COŚ JESZCZE TU ZMIENIĆ ?? Ps. chodziło o wynik obliczeń... * Typy proste: int b, double a, char * Typy złożone: return 0 * Typy całkowite: int b=11 * Typy zmiennoprzecinkowe: double a=15/7 * Zmienne wskaźnikowe: char* * Zmienne tablicowe: brak ?? * Funkcje: pow, atoi, printf * Słowa kluczowe: return * Wynik: 2048
Konwersję z liczby całkowitej na string łatwo można Sobie zaimplementować, implementacje funkcji itoa() też są dostępna, wystarczy poszukać w sieci: [url=http://en.wikipedia.org/wiki/Itoa]i... Część po przecinku też można wydobyć za pomocą itoa() wystarczy pomnożyć wynik przez wielokrotność 10 i zapisać go do integer. Warto ogólnie operować na liczbach...
Dzięki ;D miałem stdio.h A w jaki sposób wyświetlać liczby zmiennoprzecinkowe? bo pisząc: [syntax=c] char bufor[7]; float val=122.6; lcd_str( itoa(val, bufor, 10) ); [/syntax] Dostaję na wyświetlacz 122
napisz w języku C funkcję, która dzieli dwie liczby zmiennoprzecinkowe mające długość do tysiąca cyfr w zapisie dziesiętnym Zadanie to przekracza możliwości języka C i zwykłych typów zmiennych, które nie są w stanie pomieścić tak dużych liczb zmiennoprzecinkowych. Aby rozwiązać ten problem, należy skorzystać z bibliotek matematycznych, takich jak GMP...
A moze pora na unie. Coprawda nie Europejską ;) wyglada to tak: union { struct{char hi,lo} byte; int word;} Moja_zmienna; w taki sposób Moja_zmienna.word - to zmienna typu int Moja_zmienna.byte.lo - mlodsza jej czesc Moja_zmienna.byte.hi - starsza jej czesc Jako cala zmienna wykorzystujesz typu int a gdy chcesz zapisac do epromumusisz zapisac dwie jej...
Czy można jakoś wprowadzić parametr do strtod aby zaczynał z innego miejsca niż początek zmiennej? Użyj sscanf i odpowiedniego ciągu formatującego. No tylko, że domyślnie sscanf nie zawiera obsługi formatów zmiennoprzecinkowych. A włączenie jej "nieco" zwiększy rozmiar kodu wynikowego.
Cuda się dzieją i to niesamowite : Watt.c #define F_CPU 1000000UL // 1 MHz #include <avr/delay.h> #include <avr/signal.h> #include <avr/interrupt.h> #include <avr/io.h> #include <inttypes.h> #include <stdlib.h> #include <math.h> #include "Watt.h" #define REP_ADC 64 /*first array element is leftmost...
Kolega Ch.M. chyba nie zauważył że chodzi o liczby zmiennoprzecinkowe a nie typu int czy char. Tę fazę mam już za sobą. liczby typu float czy double potrzebne są przy obliczeniach i śledzenie ich wartości jest dość upierdliwe gdy widzi się je tylko jako poszczególne bajty. Dlatego poszukuję informacji co z czym połączyć aby kompilować w GCC i w miarę...
wiem że jakieś nadpróbkowanie tu jest ale jak to możliwe? Przecież dodaje 128 próbek i dzielę przez 128 Liczy średnią, najprawdopodobniej nadpróbkowuje. Z programu nie da się wywnioskować danych wejściowych, można tylko domniemywać. Przez 128? A dlaczego nie przez 4? Otóż jeśli używasz float, to masz możliwość zapisu tych dodatkowych bitów i to jak...
Problem nie polega na zapisie do pliku, tylko na tym, że obliczenia dokonujesz na typie double, który jest zmiennoprzecinkowy i ma wielkość 8 bajtow a zapis do pliku dokonujesz na typie char który ma wielkość 1 bajt i jest "bezprzecinokwy" Jest to błąd rzutowania double na char
Wypisuje Ci 0 gdyż funkcja utoa potrafi konwertować tylko liczby całkowite. Wykorzystaj funkcje dtostrf(double liczba,char dlugosc,char precyzja, char* bufor); float V; float V_wypisz; interwal=50; V= (float) S / (float) interwal; V_wypisz=V*3600; char km5[10]; dtostrf(V_wypisz, 4,2,km5)
Tablica: uint8_t tab[100]; (więc nadmiarowy) Wyświetla: "ADC: 1481_", więc brakuje tego %f Co ciekawe jeśli zmienię na: [syntax=c]sprintf((char*)tab, "ADC: %u_%f\r\n",ADC[0], 1234);[/syntax] to dostaje to samo: "ADC: 1481_"
No to zrób "eksperyment" i przekonaj się, która z funkcji zawiniła - dtostrf(), usart_sends() , czy jeszcze coś innego. else if(strstr(buff,"adc"... char x[10]={"1234.4321"... usart_sends(x); }
A co, przepraszam bardzo, ma wspólnego zmienna unsigned char (stałe bez znaku, 8bit -0-255) z obsługą liczb zmiennoprzecinkowych...?.?.? Owszem jeżeli użyjemy faktycznie typu float (i pochodnych) to program wynikowy jest wielokrotnie większy... Tyle, że tutaj kompletnie nie wiedzę związku...!.!.! No chyba, że w bibliotece delay jest zrobiony jakiś kompletny...
char st1 to nie zadziala. tablice nalezy inicjowac rozmiarem znanym podczas kompilacji. masz wiec dwa wyjscia: 1. albo rozmiar na sztywno 2. albo szybki kurs uzycia funkcji malloc i obslugi dynamicznego przydzialu pamieci (obstawiam, ze jak procek nie ma pozadnej ilosci RAMu, to nawet nie ma co probowac) x = 53.7; <-------------------- tu muszę...
Witam! Wiersz z if: Przede wszystkim, zmienna x jest zmienną typu float (zmiennoprzecinkowa) a znaki reprezentowane są przez liczby typu int, zatem x powinno być zadeklarowane jako int. Pamiętaj, że przy operacjach arytmetycznych, typ char rozszerzony jest "z urzędu" do typu int a po ich wykonaniu przykracany do typu char! Dalej: w tym samym wierszu...
Witam W C jest funkcja do konwersji liczb na string itoa- dla liczb maks 13bitowych ( chyba) oraz lota- dla dluzszych Nie wiem czy mozna tym sposobem konwertowac liczbe zmiennoprzecinkowa, ale jesli nie to pomnoz te wartosc 0,239410123 * 1000000000 num=0,239410123 * 1000000000; takie rozwiazanie troche pamieciozerne bedzie ale powinno dzialac a potem...
(...) t szerokosc wysokosc temp display.println(temp); display.println(" "); display.drawRect(123,30, 5, 5, WHITE); // to jest od celsjusza znaku display.setCursor(110,25); display.setFont(); display.display(); Blynk.virtualWrite(V2, temp); //sending to Blynk app delay(5000); } Dziękuję za ponowne dostarczenie pełnego kodu. Wydaje się on poprawny i...
ok, nawet jak bym chciał do tego celu użyć funkcji atof() i ftoa() to i tak jako parametr muszę tam dać char* a mój bufor to char. Jak sobie z tym poradzić? Chodzi mi o to że jak napiszę np: float liczba; liczba = atof(bufor_UART1 Jeśli zakładasz, że w pozycji k bufora bufor_UART1 znajduje się pierwsza cyfra liczby zmiennoprzecinkowej to musisz podać:...
Sporo możliwości daje funkcja sprintf(). Działa podobnie do printf(), tylko zamiast wywalać tekst na standardowe wyjście, wrzuca go do stringa. char bufor[ROZMIAR]; int liczba; sprintf(bufor, "wynik: %d", liczba); W podobny sposób do stringa można wstawiać liczby całkowite, zmiennoprzecinkowe, a także inne stringi. Pozdrawiam
dtostrf(celcius, 3, 4, tab) dtostrf(th, 2, 0, 2) znajdz roznice. potem porownaj to co napisales tutaj: dtostrf(th, 2, 0, 2) z tym: char* dtostrf (double __val, char __width, char __prec, char * __s) The dtostrf() function converts the double value passed in val into an ASCII representationthat will be stored under s. The caller is responsible for providing...
Na szybko .. nie wiem czy to optymalny sposób ale działa :) [syntax=c]#include <stdio.h> int main(int argc, char **argv) { char buf[100]; float liczba= 12.2; sprintf(buf,"%g",liczba); char *pbuf = buf; while( (*pbuf != 0) && (*pbuf != '.') ) pbuf++; if( *pbuf == 0 ) return 0; pbuf++; int j=0; if( *pbuf != 0 ) while(*pbuf!=0) { buf[j++]...
Nie wiem w jakim srodowisku piszesz ale np. w Keilu dla 51 tez taki zapis nie przynioslby skutku, gdyz funkcja sprintf jest typu non-reentrant . Musisz zmienic zapis na: unsigned char Line[17]; float result; result=234.0/212.0 sprintf(Line, "%f", result); LCD_Write(Line); Powinno zadzialac. Pozdrawiam BF
Podłącze się pod temat :D Uprzedzam że zaczynam z WinCC więc pytanie może być banalne: Chciałbym Tag(Word) reprezentujący rejestr MW20 prezentować na panelu jako zmiennoprzecinkową wartość tylko do odczytu. Udało mi się zrobić coś takiego ale nie wiem czy to jest poprawne: #include "apdefap.h" double _main(char* lpszPictureName, char* lpszObjectName,...
Dzięki, to mi wiele wyjaśniło. Jednak mam problem z tą funkcją char znaki; float d; d = 235.0/100.0; dtostre(d, znaki, 2, 0); I w d pojawia się liczba zmiennoprzecinkowa. Rozumiem, że pierwszy argument funkcji dtostre() to liczba, drugi argument (znaki) to chyba wskaźnik, trzeci to chyba ilość miejsc po przecinku a 4 to jakaś flaga, ale nie...
Dziwne ale po sprawdzeniu działa tak samo i dla "^" i dla "|". Bo łączysz to z "czystą" (wyzerowaną zmienną). 0 ^ 1 == 0 | 1, tak samo jak 0 ^ 0 == 0 | 0 Natomiast konwersja na float, w taki sposób jak podałeś niestety nie działa. Pisałem przecież, że kolejność przykładowa. U Ciebie może być odwrotnie. Innym problemem jest próba zmuszenia kompilatora...
Witam, Niech mi to ktos wytlumaczy... pisze program wykonujacy duzo obliczen zmiennoprzecinkowych (takie zyczenie klienta). Wyniki nie chca sie zgadzac z tymi wykonywanymi przez program na PC. Po dlugich walkach znalazlem powod bledu... tylko ze w obliczeniach staloprzecinkowych. Oto kawalek kodu: long int param_int; Bufor[10] = 0x36; param_int...
Tak własnie jest, posłużyłem się tutaj symbolem "x" gdyż nie ma większej różnicy w wielkości kodu między wpisaniem "1" lub "200" Ale piszesz: _delay_ms(200); czy: unsigned char opoznienie; ... opoznienie = 200; ... _delay_ms(opoznienie); Bo jest różnica! Funkcja _delay_ms pobiera wartość double jako parametr!! Zachodzi więc potrzeba...
Pierwsze, co przychodzi do głowy, to utworzenie funkcji, która jako argumenty przyjmie strumień i zmienną 'wartość'. Ilość kodu zmniejszy się o połowę. zastanów się, dlaczego użyłem metod width() i fill(). Dodatkowo, aby poprawnie konwertować liczby z całego zakresu typu int (32-bitowego), należy operacje przeprowadzać na zmiennych int o rozmiarze...
Dotychczas sprawdzałem poprawność wprowadzonych znaków tworzących liczbę, przez kontrolę kolejnych znaków tworzących liczbę. Ale ciągle myślałem jak można to zrobić inaczej. Przedstawiam kod. Dotyczy też liczb zmiennoprzecinkowych. Szczególnie wdzięczny będę za uwagi ze strony Dr.Vee i Dżyszli. #include <stdio.h> #include <stdlib.h> #include...
nie, dzielisz na liczby zmiennoprzecinkowe o podwojnej precyzji i wysylasz w kolejnosci losowej... <sciana> wez no poczytaj na necie o tym co to jest string, char i o sposobie zapisu znakow wg ASCII. na przyklad tutaj http://www.exforsys.com/tutorials/c-lang... http://www.google.com/search?client=oper...
Bezpośrednie wywołanie funkcji termf ("double - %d", 1.35); powoduje błędne wyświetlenie. Bo parametr %d nie określa liczby zmiennoprzecinkowej. Trochę pobawiłem się biblioteką (STM32) i jak pisałem wyżej, funkcja termf nie działa prawidłowo gdy brakuje w jej wywołaniu wskaźnika do tablicy (nie wiem dlaczego) Trzeba go dodać: int termf (char *ptr,const...
Wydaje mi się że przez serial wysyłasz bajt (np. char lub uit8_t właśnie) więc nie powinno być żadnego problemu pod tym względem. Do obliczeń możesz wykorzystać int (zależy co będziesz robił ale z reguły dużo wygodniejszy) lub float, jeżeli potrzebujesz zmiennoprzecinkowe (na avr float jest bardzo ciężki, są triki które pozwalają na jego ominięcie,...
Witam ! Zdania na ten temat są podzielone, niby dzisiejsze IDE pozwalają na pokazywanie np jakiego typu jest dana zmienna. Dopiero się uczę, więc proszę zawodowych programistów o odpowiedz. Czy w praktyce stosujecie notacje węgierską ? Bo jeśli tak to sam zacznę ją stosować i wyrabiać już sobie dobre nawyki. Przedrostki notacji węgierskiej : Typy zmiennych:...
Zgadzam się że łatwiej przesiąść się na coś innego ale tym razem nie rozchodzi się o liczby zmiennoprzecinkowe.. Tym razem zastanawiam się czy któregoś dnia program się nie wysypie bo do jednej zmiennej może coś zostać załadowane w tym samym czasie. Na myśli mam tego typu przypadek (ale nie jest to to nad czym pracuje): char bufor[40]; PRZERWANIE_UARTU...
Czyli nie dość, że na stosie masz 1 kB tablicę, to jeszcze używasz funkcji która jest znana z tego, że używa naprawdę DUŻO stosu. Zacznij od zmniejszenia tej tablicy albo przeniesienia jej do zmiennych globalnych, a następnie - jeśli nie pomoże - znajdź jak w Keilu zwiększyć rozmiar stosu. Wielkie dzięki, pomogło. Przeniosłem do globalnych Do sekcji...
Witam. Nie wiem w czym jest problem, ale nie mogę odczytac wartości z adc. W programie osobno z samą instrukcją do oczytu wartosci adc działa, ale dodając do pełnego projektu wartość znika i pokazuje cały czas 0. [syntax=c]void ADC_set() { DDRA &= ~(1<<PA0); /* ustawienie portu A na wyjście */ ADCSRA = 0x87;/* włączenie ADC, fr/128 */ } int...
Przeczytałem, to, ale problem polega na tym że po takiej zamianie będę miał temperaturę w zmiennej char, i nie będę mógł jej porównać z inną temperaturą. Jak robiłem termometr na LM35 to zrobiłem to w taki prosty sposób że miałem np. int calkowita = wynik/100 int poprzecinku = wynik%100 int bezprzecinka=calkowita*100+poprzecinku i miałem jedną cyfrę...
Żeby to złożyć musisz poznać sposób zapisu liczb zmiennoprzecinkowych (dla uC opisany w jednym z linków, dla PC zapewne będzie podobny). W sumie, jeżeli nie zależy Ci na czasie, możesz sobie pozwolić na wysłanie kilkunastu bajtów, zamist czterech, i nie chce Ci się szukać standardów zapisu floatów to zrób tak jak pisałeś. Przy obsłudze UARTA przerwaniem...
Dziękuję za pomoc. Wykorzystam jednak liczby zmiennoprzecinkowe typu float. Program będzie bardziej obszerny oraz zapewne wolniejszy niż w przypadku, kiedy wykorzystałbym typy stałoprzecinkowe, lecz przy tak niskiej częstotliwości próbkowania mikrokontroler bez problemu powinien nadążać przy przetwarzaniu danych. Zmodyfikowałem program. Tym razem zastosowałem...
https://obrazki.elektroda.pl/1502060700_... Uruchomienie na Windowsie A więc zacznijmy. Pierwszą, dość pozytywną dla nas obserwacją jest fakt, że sockety są też na Windowsie, więc prototyp zrobimy normalnie na komputerze... Przypomnijmy sobie poprzedni kod: gethostbyname , która dostępna jest zarówno na Windowsie/Linuxie, jak i np....
Probuję oprogramować kość DDS (AD9835); częstość generowanego sygnału programuje się wysyłając cztery razy 16bitowe słowa, w każdym słowie jest 8 bitów tworzących 32 bitowe słowo określające bezpośrednio częstość. Tego za bardzo nie rozumiem. 16-bitowe słowo, które ma 8 bitów? Czy chodzi o to, że poza danymi o częstotliwości wysyłane jest coś jeszcze,...
Witam, Zrobiłem VI w Labview do komunikacji z Atmegą32 przez RS-232. Atmega wykonuję obliczenia zmiennoprzecinkowe i wysyła w czterech bajtach dane typu float. Labview zaś po otrzymaniu czterobajtowych danych typy string, powinno konwertować je na dane float przy pomocy funkcji Scan from string. Niestety, ale nie wiem czemu labview widzi gdzieś problem...
Witam! Napisałem programik liczący średnią. Mam pytanie, co w nim zmienić, żeby podawał po przecinku wyniki. Drugie - co zmienić, żeby móc wprowadzać nieokreśloną wcześniej liczbą liczb, ale przerywać wprowadzanie klawiszem np. n i wtedy program policzy średnią tego, co wprowadziłem? licznik trzyma ilość wprowadzeń, wynik trzyma sumę a potem średnią....
chara const chara chara const chara konwersja atmega zmiennoprzecinkowy
ładowanie akumulatora aparat quatro bezpośrednio wycinanie kondensatora
pilot cosmo generator sygnałów alarmowych
Jak sprawdzić adres MAC karty sieciowej w Windows 10/11 – ipconfig, PowerShell, GUI Termet Silver Pro 20 kW – wejście w ustawienia serwisowe kotła gazowego