Poslao: 28 Feb 2018 20:46
|
offline
- E.L.I.T.E.
- Legendarni građanin
- Pridružio: 23 Maj 2012
- Poruke: 4575
|
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
time_t sekunde(int a[3])
{
struct tm tmdate = {0};
tmdate.tm_year = atoi(&a[2]) - 1900;
tmdate.tm_mon = atoi(&a[1]) - 1;
tmdate.tm_mday = atoi(&a[0]);
time_t t = mktime( &tmdate );
return t;
}
int uporedi(const void *a, const void *b) {
if( *(int*)a == *(int*)b )
{
return 0;
}
return *(int*)a < *(int*)b ? -1 : 1;
}
int * unesi(int v)
{
static int t[20];
int a[3], i,j;
for(i=0;i<v;i++)
{
for(j=0;j<3;j++)
{
scanf("%i",&a[j]);
}
t[i] = sekunde(&a);
}
qsort(t, v, sizeof(int), uporedi);
return t;
}
int main()
{
int n, i, max;
max = 1;
printf("Unesi broj statusa: ");
scanf("%i",&n);
int* a = unesi(n);
for (i=0; i<n-1;i++)
{
if (a[i+1] > a[i] + 86400)
{
max = 0;
}
max++;
}
printf("Max broj vezanih statusa: %i", max);
return 0;
}
Radi sa ovim primera koje sam probao iz prvog posta
Ima još dosta stvari koje treba ispraviti, ali nemam baš sad vremena da idem u detalje, ovo je verzija koja radi sa minimalnim ispravkama.
|
|
|
Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
|
|
Poslao: 16 Apr 2018 16:14
|
offline
- Milos ZA
- Super građanin
- Pridružio: 31 Dec 2015
- Poruke: 1272
|
Eto mene opet, ali sa malo drugacijim problemom . Pravio sam program koji sluzi za konvertovanje binarnih brojeva u dekadne. Evo ga program:
IZ BINARNIH U DEKADNE
#include<stdio.h>
#include<math.h>
main()
{
int i , x = 0, step = 0;
long n;
printf("Unesi binarni broj: ");
scanf("%i",&n);
while(n != 0)
{
i = n % 10;
x = x + i * pow(2,step);
step++;
n = n / 10;
}
printf("Dekadni broj je %i",x);
scanf("%i");
}
Imam problem to sto ako unesem binarni broj kao long ili int tip promenljive sa puno cifara (racunar to vidi kao veliki broj), na kraju ne dobijam dobar rezultat u dekadnom izdanju broja. Na primer, ako unesem binarni broj 1111111111 (deset jedinica) dobijem rezultat 1023 sto je dobro, ali ako unesem broj 11111111111 (jedanaest jedinica) dobijem rezultat -3809. Kako to da sredim?
Pravio sam program za konvertovanje dekadnih u binarne i to sam radio tako sto mi je rezultat kao binarni broj zapravo niz brojeva (nula i jedinica). To radi i sa velikim brojeva. Verovatno bih mogao da napravim unos binarnog broja kao niz brojeva, ali onda ne znam kako da prekinem niz, a da ne ukucavam neki drugi broj ili da vec nisam na pocetku definisao koliko ce binarni broj da ima cifara.
Hvala!
|
|
|
|
Poslao: 16 Apr 2018 16:33
|
offline
- E.L.I.T.E.
- Legendarni građanin
- Pridružio: 23 Maj 2012
- Poruke: 4575
|
Možeš da ucitaš ceo broj sa ulaza kao string, odradiš split i to ubaciš u linked listu (ili neku drugu dinamički rastuću strukturu).
|
|
|
|
Poslao: 16 Apr 2018 17:18
|
offline
- Milos ZA
- Super građanin
- Pridružio: 31 Dec 2015
- Poruke: 1272
|
Sad sam bas gledao sta je split i nije mi bas jasno. Sta on tacno radi? Jel on odvaja elemente stringa izmedju zadatih karaktera?
|
|
|
|
Poslao: 16 Apr 2018 17:55
|
offline
- vasa.93
- Moderator foruma
- Pridružio: 17 Dec 2007
- Poruke: 14824
- Gde živiš: Niš
|
Napisano: 16 Apr 2018 18:23
Ne treba ti lančana lista, tako samo komplikuješ bespotrebno. Možeš da obrađuješ string počev od poslednjeg elementa.
Takođe, gledaj da izbaciš pow i deljenje, pošto su to skupe operacije u odnosu na shift operator koji je ovde dovoljan da ti završi ceo posao. On je tipa 100 puta brži od deljenja. Mada, ako je pow implementiran kako treba, trebalo bi da interno koristi shift kada radi sa osnovom koja je stepen dvojke.
Dopuna: 16 Apr 2018 18:51
Generalno, za ovaj problem su ti potrebne samo dve operacije - plus i shift:
#include <stdio.h>
#include <string.h>
#define MAX_LEN 32
using namespace std;
int main()
{
char line[MAX_LEN];
int i, len, result = 0;
long factor = 1;
printf("Unesi binarni broj: ");
if (fgets(line, MAX_LEN, stdin) != NULL)
{
len = strlen(line);
for(i = len - 2; i >= 0; i--)
{
if((char)line[i] == '1')
result += factor;
factor = factor << 1;
}
}
printf("Dekadni broj je %i", result);
return 0;
}
Dopuna: 16 Apr 2018 18:55
E da, proveri samo ovo oko strlen, pošto se ne sećam tačno kako tačno računa dužinu, tj. da li uključuje u dužinu '\n' ili jok.
|
|
|
|
Poslao: 17 Apr 2018 15:31
|
offline
- Milos ZA
- Super građanin
- Pridružio: 31 Dec 2015
- Poruke: 1272
|
Pregledao sam tvoj program i malo googlao, ali imam neka pitanja.
1. Cemu sluzi using namespace? Vidim da se osim u 6. liniji koda vise ne pominje ni namespace ni std.
2. Zasto je promenjiva factor jednaka 1 kada je definisana?
3. Funkcija fgets() mi nije bas jasna. Prvi argument je ime stringa, drugi max duzina stringa, ali mi ovaj treci argument nije jasan.
4. Zasto je u for ciklusu i = len - 2? Zar ne bi trebalo da bude i = len - 1, posto strlen ne racuna '\0' u duzinu stringa.
5. Da li shift operator sluzi samo da pomeri sa jednog elementa stringa na drugi?
Hvala!
|
|
|
|
Poslao: 17 Apr 2018 19:55
|
offline
- vasa.93
- Moderator foruma
- Pridružio: 17 Dec 2007
- Poruke: 14824
- Gde živiš: Niš
|
1. Namespace je zaostao iz C++ šablona. Ovde je to suvišno, slobodno ignoriši.
2. Zato što tako treba. Tu promenljivu treba da posmatraš kao jedan bit koji samo 'šetaš' u zavisnosti od težine.
3. Treći argument je pokazivač na tok (stream) iz koga se čita string. U ovom slučaju je to standardni ulaz (stdin - odnosno unos sa tastature).
4. Zato što težine bitova u binarnom zapisu takođe kreću od 0. Binarni broj 110 jednak je dekadnom 1*2^2 + 1*2^1 + 0*2^0 = 6. Dakle, prilikom inicijalizacije i na n - 2, to 2 je da bi se najpre anulirao zero based indeks (što vredi za pomeraj 1), kao i da bi se anulirala zero based težina u binarnom zapisu (što takođe vredi 1).
5. Ne. Shift uopšte ne radi sa stringom u ovom slučaju. Shift pomera sadržaj jedne promenljive ulevo ili udesno za broj mesta koji se navodi kao desni operand. Shift ulevo za jednu poziciju ekvivalentan je množenju sa dva (npr. 0100 postaje 1000), a shift udesno deljenju sa dva.
|
|
|
|
|
Poslao: 18 Apr 2018 15:27
|
offline
- vasa.93
- Moderator foruma
- Pridružio: 17 Dec 2007
- Poruke: 14824
- Gde živiš: Niš
|
Čita 'bit' po bit iz ulaznog stringa i ako je tekući bit jednak 1 dodaje 2^težina-bita na izlazni rezultat.
Probaj da u dibageru prođeš kroz kod iteraciju po iteraciju i shvatićeš već.
|
|
|
|
Poslao: 01 Dec 2018 12:23
|
|
Moze li mi neko pomoci imam zadatak iz programiranja radi se o stringovima programski jezik C.
Korisnik unosi dva dugačka stringa i jednu reč (sve malim slovima). Potrebno je pronaći broj
pojavljivanja unete reči u prvom i drugom stringu. Takođe, ispisati u kom stringu se najviše puta
pojavila uneta reč. Ako je jednak broj pojavljivanja, ispisati oba stringa.
Primer 1:
Ulaz:
string 1: primer recenice gde se ponavlja rec primer vise puta zato je ovo dobar primer
string 2: na primer ne bi bilo lose da domaci zavrsim do kraja dana da bih kasnije imao vise
vremena
reč: primer
Izlaz:
Reč ‘primer’ se pojavljuje 3 puta u prvom stringu
Reč ‘primer’ se pojavljuje 1 put u drugom stringu
Reč ‘primer’ se više puta pojavljuje u stringu ‘primer recenice gde se ponavlja rec primer vise
puta zato je ovo dobar primer’
|
|
|
|