Programiranje u C-u - od svega pomalo
- poruka: 1.661
- |
- čitano: 351.048
- |
- moderatori:
Lazarus Long, XXX-Man, vincimus
Po tome upisane brojeve možeš ispisati kao 65 + broj[i]
S time da deseto slovo ide po uvjetu 64 + broj[i].
Za ispis slova koristiš %c
https://commons.wikimedia.org/wiki/File:Ascii-codes-table.png
ne prihvaća mi sizeof u for
#include <stdio.h>
int main()
{
int brojevi[10];
for (byte i = 0; i < sizeof(brojevi); i++) sscanf("%d", &brojevi[i]);
for (byte i = 0; i < sizeof(brojevi); i++)
{
if (brojevi[i] != 0 && i == sizeof(brojevi) - 1) printf("%c ", brojevi[i] + 64); // ZADNJE SLOVO
else if (i != sizeof(brojevi) - 1) printf("%c ", brojevi[i] + 65); // SLOVO U REDU
else printf("Kraj poruke");
}
}
Šta ću postići s sizeof jer ne prihvaća u for petlji
Zanima me kako kad petlja krene vrtiti broj 1, kako da mu pridružim broj koji upišem. npr 5.
I jel ovaj zadatak uopće treba s forpetljom, pošto mi petlja sama izbacije input, a ja bi trebao napisati svoje brojeve.
Riješio sam to s if i else if
Pozdrav opet
Zadatak je upisati decimalne brojeve, pretvoriti ih u binarne i onda pobrojati broj jedinica (1). Ne znam sad kako da u sve to ubacim da prepoznaje jedinice i broji ih.
Za sad sam ovo uspio:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int broj,b,broj2, b2,br1=0,br2=0, i, ostatak, binarni1=0, binarni2=0, jedinica1=1, jedinica2=1;
broj2=b2;
scanf("%d %d", &b, &b2);
broj=b;
while (b>0)
{
ostatak= b%2;
binarni1= binarni1+ostatak*jedinica1;
jedinica1=jedinica1*10;
b= b/2;
}
broj2=b2;
while (b2>0)
{
ostatak= b2%2;
binarni2= binarni2+ostatak*jedinica2;
jedinica2=jedinica2*10;
b2= b2/2;
}
printf("%d %d", binarni1, binarni2);
return 0;
}
Evo ti u C++u pa prepravi kod u C(sscanf i te šeme).
Funkcija za dec2bin je pokupljena s neta.
#include <conio.h>
#include <iostream>
using namespace std;
void countOnes(int x, int &ones)
{
do
{
if (x % 10 == 1) ones++;
x /= 10;
}
while (x != 0);
}
long long convertDecimalToBinary(int n)
{
long long binaryNumber = 0;
int remainder, i = 1, step = 1;
while (n!=0)
{
remainder = n%2;
cout << "Step " << step++ << ": " << n << "/2, Remainder = " << remainder << ", Quotient = " << n/2 << endl;
n /= 2;
binaryNumber += remainder*i;
i *= 10;
}
return binaryNumber;
}
int main()
{
int x, ones = 0;
cout << "Upisi broj: ";
cin >> x;
x = convertDecimalToBinary(x);
countOnes(x, ones);
cout << endl << ones;
getch();
return 0;
}
Evo ti u C++u pa prepravi kod u C(sscanf i te šeme).
Funkcija za dec2bin je pokupljena s neta.
#include <conio.h>
#include <iostream>
using namespace std;
void countOnes(int x, int &ones)
{
do
{
if (x % 10 == 1) ones++;
x /= 10;
}
while (x != 0);
}
long long convertDecimalToBinary(int n)
{
long long binaryNumber = 0;
int remainder, i = 1, step = 1;
while (n!=0)
{
remainder = n%2;
cout << "Step " << step++ << ": " << n << "/2, Remainder = " << remainder << ", Quotient = " << n/2 << endl;
n /= 2;
binaryNumber += remainder*i;
i *= 10;
}
return binaryNumber;
}
int main()
{
int x, ones = 0;
cout << "Upisi broj: ";
cin >> x;
x = convertDecimalToBinary(x);
countOnes(x, ones);
cout << endl << ones;
getch();
return 0;
}
Hvala, probat cu to konvertirati s obzirom da sam tek krenuo s C programiranjem
Trebaš samo cin u sscanf i cout u printf
Poz, imam zadatak:
"Strašni Bundy voli kucati na vrata susjedima. Većinom susjedi baš ne reagiraju na to dobro - neki su već navikli pa znaju da on kuca otprilike oko 16 sati popodne, drugi se možda u to vrijeme ne nalaze doma ali vide masne otiske od kucanja u gornjem lijevom kutu vrata. Ostali koji su kod kuće su ga već na nekoliko načina pokušali uhvatiti i kazniti ali nije im uspjelo iz raznih raloga - neki se poskliznu na izlazu iz stana od masnih otisaka Bundy-evih cipela na svakodnevno svježe opranom podu hodnika, drugi su prestari da bi ga uhvatili ili je Bundy jednostavno prebrz. No ono što svi zajedno čekaju je poznati praznik Halloween (koji se inače na taj način ne slavi u Hrvata još od stoljeća sedmog), ali naš Bundy ga svejedno slavi. Jedini.
@lukaspy
Poanta je da primjeniš algoritam koji rješava navedeni problem.
Već si linkao na opis toga što je Hodge Conjecture, pa malo proučiš i primjeniš na svoj problem.
Pozdrav,
naišo sam na jedan problem.
"Napisati program koji će na temelju unosa datuma i godine rođenja za jednu osobu ispisati koji je ona horoskopski znak prema zodijaku i kojem elementu pripada. Nakon toga u program se može unijeti N osoba za koje se radi izračun kompatibilnosti s prvom osobom. Znakovi se slažu najbolje (razina kompatibilnosti) ukoliko pripadaju istom elementu."
Kako napraviti dio sa unosom N osoba i da npr. napišem 2 osobe i onda ide unos datuma tih osoba.
Evo mene opet, zapeo sam kod krivog unosa.
Naime trebam učitati npr. dan koji je u intervalu od 1 do 31.
Ako je krivi, kako da ga opet učitam:
scanf ("%d", &dan);
if (dan < 0 || dan >31)
printf ("Krivi unos");
e sad da li ovdje ide opet scanf pa da prođe opet kroz if petlju (msm ne znam ovaj dio)
if(uvjet)
{
Krivi unos
goto UNOS;
}
na mobitelu sam
if(uvjet)
{
Krivi unos
goto UNOS;
}
na mobitelu sam
ma riješio sam bilo je
uvijet
pa printf "Krivi unos";
scanf ("%d", &dan ili mjesec ili godina);
al hvala
Pozdrav,
može li mi netko reći kako ovo funkcionira:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int niz[8] = {-1};
int i = 0;
for(i = 7; i >= 0; i--)
{
niz[i] += niz[7-i] * i;
}
printf("%d", niz[i]);
return 0;
}
znam da je niz -1 0 0 0 0 0 0 -7.
Znam zašto je -1, ali ne razumijem ostatak kako se izvršava dalje kod.
SHVATIH
#include <stdio.h>
#include <stdlib.h>
#define MAXR 10
#define MAXS 10
int main()
{
int i,j, sx=1, sy=1;
/** V= Vrata, TOCKE= su mjesta*/
enum vrata {V=35};
enum {TOCKE=46};
char mat[MAXR][MAXS];
mat[0][0]= V;
mat [MAXR-1][0]= V;
mat [0][MAXS-1]= V;
mat [MAXR-1][MAXS-1]= V;
for (i=1;i<MAXR-1; i++){
mat [i][0]= mat [i][MAXS-1]=V;
for (j=1; j<MAXS-1;j++){
mat [0][j]=mat [MAXR-1][j]=V;
}
}
for(i = 1; i < MAXR-1; i++){
for(j = 1; j < MAXS-1; j++){
mat[i][j] = TOCKE;
}
}
return 0;
}
Pozdrav, kako da ovo dobro printf-am ?
Hvala unaprijed
Int f(int x) { return (x + 1);}
Hvala unaprijed
Vraca vrijednost na mjesto gdje si pozvao funkciju
npr.,
Neka funkcija faktorijel vraca int koji je faktorijel broja kojeg primi
a = faktorijel(3)
u varijablu a ce se spremiti rezultat funkcije (u ovom slucaju 6)
Void funkcije ne vracaju vrijednost pa bi poziv:
a = neka_funkc_koja_vraca_void()
bio neispravan jer u varijablu a ne bi imao sto spremiti
Da li netko može ovo riješiti?
- 1. Kreirati dvodimenzionalno cjelobrojno polje koje predstavlja pravokutnu matricu i omogućiti korisniku unos dimenzije tako da je n x m (4<= n <= 10 i 5 <=m<= 13).
Popuniti dvodimenzionalno polje pseudo-slučajnim vrijednostima [-25, 30]. Pronaći najmanji element svakog stupca, te ispisati na ekran sumu svakog stupca pomnoženu najmanjim elementom tog stupca.
- 2. Napisati funkciju koja određuje i vraća koliko ima elemenata u predanom joj polju cijelih brojeva koje počinju sa znamenkom 2. U svrhu testiranja u main() funkciji učitati n elemenata s tipkovnice u cjelobrojno polje te pozvati napisanu funkciju i ispisati njenu povratnu vrijednost na ekran.
- 3. Napisati funkciju koja računa i vraća produkt svih vrijednosti elemenata polja koji su strogo veći od srednje vrijednosti svih elemenata polja i strogo manji od najveće vrijednosti u polju. Funkcija treba raditi i sa poljima različite duljine. U main() funkciji deklarirati jedno polje duljine 25, te popuniti s pseudo-slučajnim brojevima [-10, 30]. U main() funkciji pozvati napisanu funkciju i ispisati povratnu vrijednost.
- 4. Napisati funkciju koja u predanom joj stringu pronalazi i vraća koliko puta se ponavlja slog ''ka''. U main() funkciji dinamički zauzeti polje od 100 elemenata tipa char, unijeti string s tipkovnice i predati funkciji te ispisati povratnu vrijednost funkcije.
Pozdrav ljudi,
Evo na jesen upisujem TVZ računarstvo, a kako nemam nekog baš predzanja s programiranjem odlučio sam krenuti sad da bude lakše dok krene faks. Gledam CS50 tutorijal na YouTubeu i rješavam zadatke usput. Evo recimo ovaj zadatak mogu riješiti: "Napišite program koji u unosu prvo prima koliko će se brojeva unijeti, a potom se unosi toliko brojeva. Prebrojite i ispišite koliko unijetih brojeva je neparno. Maksimalno se smije unijeti 20 brojeva, a unijeti brojevi moraju biti cijeli, pozitivni i manji od 100." Ali sad nešto kompleksnije bi već bio malo problem. https://www.znanje.org/knjige/computer/c/c_mm/nizovi.htm Ovo isto sam ajmo reć sve pohvatao.
Da li da samo nastavim pratiti CS50
pa ću preko tog tutorijala polako moći rješavati kompleksnije zadatke ili imate neki drugi prijedlog. Gdje bih još mogao naći zadatke koji bi bili po mojoj mjeri?
Hvala unaprijed.
@Hazar
Probaj po nekoj knjizi rokati frendač. Možeš i video, ali bitno da shvatiš teoriju. Za zadatka imaš na Internetu koliko god toga želiš. Kreni sa nekim materijalima koji se rade na fakultetu. Upišeš u Google "zbirka zadataka programiranje", te će naći zadatke, ali možeš krenuti i sa zadacima sa sajtova kao što su:codewars.com, edabit.com, hackernoon.com,code signal.....samo gluglaj pojmove koji te zanimaju.
Mali koracima ćeš uspjeti stvoriti sebi programersku apstrakciju, te ćeš svaki novi prijeđenim izazovom postajati sve bolji i bolji.
Ili pak kreni raditi neki mini-projektiće kaj ćeš gledati kaj ekipa radi na YT.
Suerte!
@Hazar
Probaj po nekoj knjizi rokati frendač. Možeš i video, ali bitno da shvatiš teoriju. Za zadatka imaš na Internetu koliko god toga želiš. Kreni sa nekim materijalima koji se rade na fakultetu. Upišeš u Google "zbirka zadataka programiranje", te će naći zadatke, ali možeš krenuti i sa zadacima sa sajtova kao što su:codewars.com, edabit.com, hackernoon.com,code signal.....samo gluglaj pojmove koji te zanimaju.
Mali koracima ćeš uspjeti stvoriti sebi programersku apstrakciju, te ćeš svaki novi prijeđenim izazovom postajati sve bolji i bolji.
Ili pak kreni raditi neki mini-projektiće kaj ćeš gledati kaj ekipa radi na YT.
Suerte!
Hvala, a tako najbolje da, korak po korak. Skužio sam da mi je dobro proučavati programe gdje mi je većina već poznata i razumljiva, ali jedan dio koda nije pa onda njega pohvatam, primjerice igrica papir škare dijamant.
@Hazar
Ono što si pitao za svoj zadatak za kontrolu unosa raspona brojeva (uzeo sam raspon od 1-5, radi lakšeg debugiranja):
#include <stdio.h>
int main()
{
int i=0;
int lista[5];
printf("Unesi 5 brojeva izmedu 1 i 5\n");
do
{
printf("Unesi %d. broj: ", i + 1);
scanf("%d", &lista[i]);
//kontrola unosa - dal' broj odgovara rasponu
if (lista[i] > 5 || lista[i] < 1) {
printf("Pogresan unos, unesite broj u rasponu od 1 do 5 \n");
continue;
}
i++;
} while (i < 5);
printf("\n");
//ispis sadrzaja polja
for(int j=0; j<5;j++)
printf("%d ", lista[j]);
printf("\n");
system("pause");
return 0;
}
Bolje da sam radi vjeruj mi, treba naučiti neku 1d niz,petlju for, while. break, continue, brojac i if (if else).
Začudo sam čak uspio sam, samo nisam baš bio zadovoljan izgledom rješenja, htio sam da bude malo elegantnije :D. I čak sam stavio tu kod, ali rekoh ma dobro neću zamarat i izbrisao taj dio posta, ali kolega je odgovorio i hvala. Ma bit će pitanja, ne tražim da mi netko drugi rješava, od tog ništa nema.