Programiranje u C-u - od svega pomalo
- poruka: 1.661
- |
- čitano: 386.995
- |
- moderatori:
Lazarus Long, XXX-Man, vincimus
- +/- sve poruke
- ravni prikaz
- starije poruke gore
Pa oba si mogao kompajlirati i vidjeti rezultat ako ti je tako teško. Za oba zadatka dovoljno ti je samo znati petlje, polja i što radi modulo operator. Priznaj da nisi ni pokušao odvrtiti petlje u glavi...
FINITO? Zbilja?
#include <stdio.h>
#include <string.h>
int main()
{
char stringovi[10][255]={0};
int i, n;
for (i=0; i<10; i++)
{
gets(stringovi[i]);
if (strcmp(stringovi[i], "FINITO")==0)
break;
}
for (n=0; n<i; n++)
if (strlen(stringovi[n])%2==0)
printf ("%s\n", stringovi[n]);
return 0;
}
Pazi da FINITO napišeš velikim slovima, jer nisam radio konverzije u mala slova budući da si i ti naveo tu riječ pisanu velikim slovima.
U prva dva uzmi ovako:
input: 3
i=0
0%3!=0
i=1
1%3!=0
i=2
2%3!=0
i=3
3%3==0
Ispiše se "april"!
U polje result se upisuje "april".
Drugi
x: 7
Sedam puta će se varijabla g uvećati, prvi put za 0, zatim za 1, pa za 2, pa za 3 ... do 6. Odnosno uvećati će se šest puta jer iako uvećaš sa 0, šta si dobio, opet taj broj.
Pozdrav! Početnik sam u C-u i zanima me kako bi se ovo riješilo.
Znači, trebam ispisati brojeve od 0 do 100 ali po 3 (nije problem).
for(a=0;a<=100;a+=3)
{
printf("\n %d",a);
}
Ali, sada kada je to ispisano, zanima me jeli moguce prebrojati te brojeve.
Kada ih izlista, poslje da pise npr. Brojeva od 0 do 100 po 3 ima: __ .
Hvala.
Možeš dodati pomoćnu varijablu koja će ti služiti kao brojač. Recimo:
int pom=0;
for(a=0;a<=100;a+=3)
{
pom++;
printf("\n %d",a);
}
printd("Brojeva od 0 do 100 ima %d", pom);
Možeš dodati pomoćnu varijablu koja će ti služiti kao brojač. Recimo:
int pom=0;
for(a=0;a<=100;a+=3)
{
pom++;
printf("\n %d",a);
}
printd("Brojeva od 0 do 100 ima %d", pom);
E puno hvala, mislim da sam shvatio.
Možeš iskoristiti i brojač petlje za dobiti broj brojeva jer je broj brojeva jednak broju iteracija petlje.
Ono gore se zove postavljanje zastavice, a varijabla pom zastavica i uobičajena je procedura, ponekad se može bez nje, ponekad ne.
#include<stdio.h>
int main()
{
int i;
for(i=0; i<=100; i+=3)
printf("%d ", i);
printf("\n%d", i/3);
return 0;
}
Možeš dodati pomoćnu varijablu koja će ti služiti kao brojač. Recimo:
int pom=0;
for(a=0;a<=100;a+=3)
{
pom++;
printf("\n %d",a);
}
printd("Brojeva od 0 do 100 ima %d", pom);
E puno hvala, mislim da sam shvatio.
....vidim vidim da su prve godine faksa počele ali i neke škole ...bude još ovakvih zadataka :)
Može li mi netko dati neki dobar C tutorial ? Može i na hrvatskom i na engleskom jeziku.
Može li mi netko dati neki dobar C tutorial ? Može i na hrvatskom i na engleskom jeziku.
Može li mi netko dati neki dobar C tutorial ? Može i na hrvatskom i na engleskom jeziku.
Na toga sam i ja naišao.Čini se ok. Je li iz iskustva/znanja govoriš da je dobar ?
Mislim treba bi neki tutorial koji je u jednu ruku razumljiv ali opet i detaljan,zato i pitam ovdje ako mi netko može preporučiti.
Radimo u C-u na faksu, i moram reči da me PHP razmazio što se tiče rada sa stringovima. Razlika nebo i zemlja.
Na toga sam i ja naišao.Čini se ok. Je li iz iskustva/znanja govoriš da je dobar ?
Mislim treba bi neki tutorial koji je u jednu ruku razumljiv ali opet i detaljan,zato i pitam ovdje ako mi netko može preporučiti.
Koliko sam uspio preletiti po njemu, cini mi se dosta dobrim za tutorial. Mislim da bi trebao biti razumljiv svakome.
Na toga sam i ja naišao.Čini se ok. Je li iz iskustva/znanja govoriš da je dobar ?
Mislim treba bi neki tutorial koji je u jednu ruku razumljiv ali opet i detaljan,zato i pitam ovdje ako mi netko može preporučiti.
Koliko sam uspio preletiti po njemu, cini mi se dosta dobrim za tutorial. Mislim da bi trebao biti razumljiv svakome.
Hvala. Onda ću radit po njemu. Ako netko zna neki bolji nek stavi link.
Napisite rekurzivnu funk. koja provjerava je li zadna rijec ili recenica obrtaljka(palindrom). U ulaznom nizu zanemarite razmak, sve znakove interpunk. i razliku izmedu velikih i malih slova.... pls help!
može i pseudo kod, bio bi poželjan zapravo :D
Ne kužim zašto bi se to trbalo riješiti rekurzivnom funkcijom kad ti treba samo jedan upit, osim ako moraš tražiti upis dokle god nije upisan palindrom.
Po meni bi pseudo kod bio:
traži upis
spremi upis u neki string
filtriraj string da ti ostanu samo slova
obrni string i spremi ga u drugu varijablu
usporedi te dvije varijable
ako su jednake, true, inače false
ispiši rezultat
E sad, ja to znam napraviti u PHP-u bez pol frke, a rad sa stringovima u C-u mi je -.-
Možda bi se rekurzivnost mogla primjeniti kod filtriranja funkcije, pošto je u C-u string zapravo array charactera, vjerojatno bi se mogla raditi rekurzija dok se ne dođe do kraja array-a (ili ti polja).
Možda pričam gluposti pa neka ti netko od ekipe koja radi u C-u to bolje napiše.
Evo ti niti vodilje: palindrom je
a) riječ koja se sastoji od jednog ili nijednog slova
b) riječ koja se dobije kad se palindromu doda isto slovo na početak i kraj
hvala dečki na pomoći! to je bio test zadatak za rekurziju, tak da je morala biti rekurzija...
Ova rekurzija koristi aritmetiku pokazivača i rad sa ascii vrijednostima char znakova, sa stoga skida razliku ascii vrijednosti na kontra stranama, ako sveukupan zbroj bude različit, odnosno veći od 0 - nije palindrom.
Abs je stavljen da ne bi bilo skrivenih iznenađenja, a "čišćenje" char niza napravljeno sa isalpha i tolower funkcijama.
#include<cstdio>
#include<cstring>
#include<cctype>
#include<cstdlib>
int RekurzijaPalindrom(char* recenica, int duljina)
{
if(duljina <= 1) return 0;
return abs(recenica[duljina-1]-recenica[0]) + RekurzijaPalindrom(recenica+1, duljina-2);
}
int main()
{
char recenica[100];
char recenica1[100];
int brojac = 0;
gets(recenica);
for (int i = 0; i < strlen(recenica); i++)
{
if(isalpha(recenica[i]))
{
recenica1[brojac++] = tolower(recenica[i]);
}
}
recenica1[brojac] = '\0';
if(RekurzijaPalindrom(recenica1, strlen(recenica1)) == 0)
printf("Palindrom\n");
else
printf("Nije palindrom\n");
return 0;
}
Nešto me zeza ovaj zadatak:
"Tražite od korisnika unos jednog po jednog znaka, te za svako unešeno slovo ispišite je li to suglasnik ili samoglasnik, a za svaku unešenu znamenku ispišite je li ona parna ili nije.
Unos prekinite kada korisnik unese znak koji nije ni slovo ni znamenka."
Kod sličnih zadataka mi je isto ovako nešto bilo - možda ima veze s charom?
#include <stdio.h>
int main()
{
char znak;
do
{
printf("Unesite slovo ili znamenku: ");
scanf("%c", &znak);
if(((znak >= 'a') && (znak <= 'z')) || ((znak >= 'A') && (znak <= 'Z')))
{
switch(znak)
{
case 'a':
case 'A':
case 'e':
case 'E':
case 'i':
case 'I':
case 'o':
case 'O':
case 'u':
case 'U':
printf("%c je samoglasnik.\n", znak);
default:
printf("%c je suglasnik.\n", znak);
}
}
else if((znak >= '0') && (znak <= '9'))
{
if(znak % 2 == 0)
printf("%c je paran.\n", znak);
else
printf("%c je neparan.\n", znak);
}
else
{
printf("%c nije ni slovo ni znamenka.\n", znak);
break;
}
}
while(znak);
return 0;
}
Nešto me zeza ovaj zadatak:
"Tražite od korisnika unos jednog po jednog znaka, te za svako unešeno slovo ispišite je li to suglasnik ili samoglasnik, a za svaku unešenu znamenku ispišite je li ona parna ili nije.
Unos prekinite kada korisnik unese znak koji nije ni slovo ni znamenka."
Kod sličnih zadataka mi je isto ovako nešto bilo - možda ima veze s charom?
Problem je što čitaš samo jedan znak a u input bufferu se nalazi i newline znak. Trebaš očistiti input buffer odmah nakon čitanja znaka, za to imaš nekoliko rješenja:
-najjednostavnije (i veoma neportabilno jer spada u undefined behaviour) jednostavno flushati stdin:
char znak;
scanf("%c", &znak);
fflush(stdin);
-pročitati sve sa inputa u nekakvo polje i nakon toga uzeti samo ono što nas zanima (prvi znak polja):
char znak, buffer[32];
fgets(buffer, 32, stdin);
znak=buffer[0];
-očistiti stdin pomoču petlje sa getchar():
char znak, c;
scanf("%c", &znak);
while ((c=getchar())!='\n' && c!=EOF);
Hvala puno, još mi je samo nedostajao break u switchu prije defaulta.
Btw, rasturaš ovo.
Zadatak nije direktno vezan za C ali vjerujem da ga znate riješiti.
Kako je broj 15 (dekadski) zapisan u računalu (8-bita). Znači jedno mjesto zauzima predznak,3 mjesta eksponent te 4 mjesta decimalni dio (broj iza 1,).
Znam to uraditi kada dobijem decimalni broj,npr. 101,1001 ali šta ako dobijem broj 1111 (15 u dekadskom) ?
Znači kako zapisati dekadski broj 15 (binarni 1111) u računalo (sustav s 8 bita) ?
Po mojoj logici to je 00001111. Prva 0 je predznak (broj je pozitivan) a ovo ostalo je broj 1111 a dodao sam tri nule ispred jer mora biti 8 znamenaka. Da li je to točno ?
HVALA
HVALA
Ha? Pojasni.
HVALA
Ha? Pojasni.
Pogledaj sliku,možda će ti biti jasnije što tražim.
Samo ovo je prikaz u 32 bita,ja tražim u 8. I tražim cijeli broj a ne realan.
Po mojoj logici broj 15 bih trebao zapisati kao 00001111 (prva 0 je predznak a ostatak 0001111 je broj 15 zapisan binarno).
Je li to točno ?
Pogledaj sliku,možda će ti biti jasnije što tražim.
Samo ovo je prikaz u 32 bita,ja tražim u 8. I tražim cijeli broj a ne realan.
Po mojoj logici broj 15 bih trebao zapisati kao 00001111 (prva 0 je predznak a ostatak 0001111 je broj 15 zapisan binarno).
Je li to točno ?
Integer (cijeli broj) i floating point (racionalni broj) se ne zapisuju isto u memoriji računala. 11112 jest 1510 zapisan kao cjeloviti broj. Nisam se nikada bavio floating point brojevima na toj razini pa ti ne mogu biti previše od koristi.
Pogledaj sliku,možda će ti biti jasnije što tražim.
Samo ovo je prikaz u 32 bita,ja tražim u 8. I tražim cijeli broj a ne realan.
Po mojoj logici broj 15 bih trebao zapisati kao 00001111 (prva 0 je predznak a ostatak 0001111 je broj 15 zapisan binarno).
Je li to točno ?
Integer (cijeli broj) i floating point (racionalni broj) se ne zapisuju isto u memoriji računala. 11112 jest 1510 zapisan kao cjeloviti broj. Nisam se nikada bavio floating point brojevima na toj razini pa ti ne mogu biti previše od koristi.
Racionalne brojeve znam zapisat. Baš zato me i zanima da li se broj 15 (1111) onda zapiše samo tako da dodamo još 4 nule ili ima neka druga caka ?
Racionalne brojeve znam zapisat. Baš zato me i zanima da li se broj 15 (1111) onda zapiše samo tako da dodamo još 4 nule ili ima neka druga caka ?
Pa te nule ispred 1111 možeš i preskočiti (isto kao što bi mogao i preskočiti nule u broju 0002341, jer je u tom slučaju to i dalje broj 2341).
Naravno ako koristiš cjelobrojni zapis, racionalni zapis nije tako jednostavan.
Racionalne brojeve znam zapisat. Baš zato me i zanima da li se broj 15 (1111) onda zapiše samo tako da dodamo još 4 nule ili ima neka druga caka ?
Pa te nule ispred 1111 možeš i preskočiti (isto kao što bi mogao i preskočiti nule u broju 0002341, jer je u tom slučaju to i dalje broj 2341).
Naravno ako koristiš cjelobrojni zapis, racionalni zapis nije tako jednostavan.
Znam da ih mogu preskočiti ali mislim da ih u ovom slučaju MORAM zapisati. Zašto ? Radi se o 8-bita ( moram zapisat 8 znamenki) tako da dodam te 4 nule ispred 1111 tek tako da popunim mjesto.