Programiranje u C-u - od svega pomalo izdvojena tema

poruka: 1.661
|
čitano: 387.228
|
moderatori: Lazarus Long, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
15 godina
offline
Programiranje u C-u - od svega pomalo

evo opet ja nesto nerazumijem

 

javi mi error odmah na if(case 4 && b=0)

 

      if (case 4 && b=0)

      {

           printf("\n Djeljenje sa nulom nije moguce!!");

      }

      else

      {

        x=a/b;

          printf("\n Rezultat je %f", x);  

          break;

          }

 

Moj PC  
0 0 hvala 0
15 godina
offline
Re: Programiranje u C-u - od svega pomalo
Sheeva kaže...

To sto si ti napisao nema apsolutno nikakvoga smisla. Ne moze tako rastavljati case naredbu.

Twitter- @capttawish Linux/GNU live forever.
Poruka je uređivana zadnji put ned 25.3.2012 11:28 (captain_soap_McTawish).
13 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

Da, hajde pročitaj tu naredbu?, pa ako ima smisla - svaka ti čast.

"Ako case 4 i b je 0"

15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
rustweaver kaže...

ili ovakav (ako koristis argumente iz komandne linije):

int main(int argc, char **argv)
{
   
    return 0;
}

Može li mi netko navest primjer kad se to koristi, u knjizi iz koje sam učio C to je objašnjeno na 1/2 strane.

15 godina
offline
Re: Programiranje u C-u - od svega pomalo
srky.du kaže...

Može li mi netko navest primjer kad se to koristi, u knjizi iz koje sam učio C to je objašnjeno na 1/2 strane.

Kada radiš o komandoj liniji(power shell,terminal,cmd...) vrlo često koristiš neke programe tako što im prosljeđuješ argumente. Primjer. Treba ti program koji će naći sumu određenih brojeva.

Obično se to izvede ovako:

#include <iostream>

using namespace std;

int main(){
    int n;
    cin>>n;
    int suma=0;
    for(i=0;i<n;i++){
         int temp;
         cin>>temp;
         suma+=temp;
    }
    cout<<suma<<endl;
    return 0;
}

Ovaj nacin ispravno radi no on je jednostavno prespor za rad. Program se prvo mora pokrenuti pa onda prvo moras upisivati broj brojeva koji ces unijeti, pa onda brojeve. To je vrlo nepkraticno i sporo za rad u komandnoj liniji. Zato se programu/skripti obicno odmah pri njezinu pokretanju salju brojevi koje cu zbrajati npr.

c:/>zbroj.exe 1 2 3 4
10
c:/>
...

Kao sto vidis ja sam odmah poslije imena programa napisao brojeve koje cu zbrajati i onda je OS proslijedio te argumente programu. U programu ti tim argumentima prisupas preko argumentima i definiciji main funkcije. I to agrc znaci broj argumenata koje je okolina proslijedila programu, a argv je polje koje sadrzi argumente proslijedene programu u obliku cstringa(zato je argv dvostruki pokazivac).

int main(int argc,char **argv){
     int suma=0;
     for(int i=0;i<argc;i++)
         suma+=atoi(argvi[i]);
     cout<<suma<<endl;
return 0;

 

Gore koristim funkciju atoi koja se nalazi u biblioteci cstdlib, a ona pretvara cstring u int.

 

Kod komandolinijskih alata, ovakve se stvari vrlo cesto koriste. Obicno se programu proslijeduju ordeni parametri koji odreduju rad programa. Naravno u takvim slucajevi se rijetko argumenti vade "rucno" kao u proslome primjeru, ves se koriste biblioteke koje sami i char **argv vade argumente i parametere proslijedene programu. Primjer je biblioteka getopt.h koja se koristi u linuxu/unixu.

Twitter- @capttawish Linux/GNU live forever.
15 godina
offline
Re: Programiranje u C-u - od svega pomalo
captain_soap_McTawish kaže...
Sheeva kaže...

To sto si ti napisao nema apsolutno nikakvoga smisla. Ne moze tako rastavljati case naredbu.

ma treba biti ovako: ako je odabran broj 4( case 4), a operand b = je 0 onda... u kodu je

Poruka je uređivana zadnji put ned 25.3.2012 13:49 (Sheeva).
15 godina
offline
Re: Programiranje u C-u - od svega pomalo
Sheeva kaže...
captain_soap_McTawish kaže...
Sheeva kaže...

To sto si ti napisao nema apsolutno nikakvoga smisla. Ne moze tako rastavljati case naredbu.

ma treba biti ovako: ako je odabran broj 4( case 4) i operand b = je 0 onda... u kodu je

Onda ti koda treba izgledati ovako:

...
case 4:
    if(b==0)
          printf("Dijeljenje s nulom nije moguce");
     else
          printf("%f",(float)a/b);
     break;

Twitter- @capttawish Linux/GNU live forever.
17 godina
offline
Programiranje u C-u - od svega pomalo

Pogledaj ovaj primjer, kroz komandnu liniju unosiš tri argumenta, prvi argument je putanja programa npr. C:\test.exe , a druga dva argumenta su dva broja koje program zbraja.

 

 

#include<stdio.h>
#include<stdlib.h>

int main (int argc, char* argv[])

{

if(argc != 3)
{
    printf("Unesi dva broja [putaja programa] [broj1][broj2]:" );
    return 1;
}
int a, b;
a = atoi(argv[1]);
b = atoi(argv[2]);

printf("%d + %d = %d", a, b, a+b);

return 0;

 
}

 

Dakle, ako želiš kroz komandnu liniju unijeti parametre, ne izvršavaš konzolni program u IDE-u, nego pokreneš command prompt i za konkretan slučaj napraviš unos:

C:\test.exe 3 5

Ako ne uneseš sva tri parametra (manje ili više) tada te program podsjeti na pravilan unos parametara i izlazi se iz programa.

 
3 0 hvala 3
17 godina
offline
Programiranje u C-u - od svega pomalo

Ako koristiš VS, uključujući i Express verziju, postoji način kako se ovaj program može izvršiti i kad se unose parametri preko komandne linije, a program  izvršavaš preko IDE-a.

U propertiesima projekta uneseš parametre koji slijede nakon putanje datoteke, a putanju datoteke izostaviš.

Na slici je to prikazano u crvenom kvadratu.

slika slika
Poruka je uređivana zadnji put ned 25.3.2012 14:40 (Floki).
 
1 0 hvala 2
15 godina
offline
Programiranje u C-u - od svega pomalo

Treba mi pomoć oko ovog zadatka: "Funkcija generira 5 slučajnih brojeva u rasponu od 10 do 20 u polju " Kad pokrenem program onda se u polju se pojave 5 istih brojeva a kad ponovno pokrenem program dobijem drugi broj koji se ponovi 5 puta u polju. Znaci ja bi trebo da se u polju pojave razliciti brojevi i sljedeci put kad pokrenem program dobiti razlicite brojeve od onih predhodnih. Koristim Dev-C++

Kod:

 

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

 

int slucajbroj(void);

 

int main()

{

 int i;

 int a[5];

 

   for(i=0;i<5;i++){

 a[i]=slucajbroj();

   } 

   for(i=0;i<5;i++){

 printf("%d,",a[i]);

   }

   printf("\n");

 system("pause"); 

 return 0;

 

}

int slucajbroj(void){

 int a;

 srand(time(NULL));

   a = ((rand() % 10) + 10);

   return a;

 

Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

Problem je u seedu, funkcija "time" ti vraca broj sekundi koji je prosao od 1 sijecnja 1970, a kako se program izvrsi u jako kratkom vremenu (puno kracem od jedne sekunde), ti pet puta pozoves funkciju "rand" sa potpuno istim seedom (tj. resetiras seed na istu pocetnu vrijednost buduci da se vrijednost koju funkcija "time" vraca ne stigne promijeniti), i kao rezultat toga dobijes pet istih brojeva.

Prebaci poziv na funkciju "srand" u main funkciju, kako bi generirao seed samo jednom, te potom nasumicne vrijednosti zasnovane na tom seedu.

My computer once beat me at chess, but we got even after a round of boxing.
Poruka je uređivana zadnji put pet 6.4.2012 19:08 (rustweaver).
15 godina
offline
Re: Programiranje u C-u - od svega pomalo

Hvala ti puno stvarno nisam znao da je tak jednostavno rjesenje.

Poruka je uređivana zadnji put pet 6.4.2012 21:15 (zagi55).
16 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Ima mozda netko nekakve zadatke gdje mogu izvjezbati matrice (polja)? Preciznije koristelje visedimenzionalnih matrica u petljama.

 
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
Makavelii kaže...

Ima mozda netko nekakve zadatke gdje mogu izvjezbati matrice (polja)? Preciznije koristelje visedimenzionalnih matrica u petljama.

  1. Ispiši glavnu i sporednu dijagonalu
  2. Ukloni stupac ili redak
  3. Rotiraj matricu

 

Primjer za 3.

1 2 3

4 5 6

7 8 9

 

rotirana

7 4 1

8 5 2

9 6 3

14 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Moze li mi neko napisati dva programa za ova dva zadatka:

 

1. treba mi program da se ovo ispisuje:

 

     5

    45

   345

  2345

12345

  2345

   345

    45

     5

 

Ovo neznam kako da napisem a da se  nepokvari akd postavim ali neide ovako vec kao i vaj drugi samo zakrenut za 90 stepeni u desno

 

 

2. treba mi program da se ovo ispisuje:

 

555555555

  4444444 

   33333

    222

     1

Poruka je uređivana zadnji put sri 11.4.2012 16:36 (eagle05).
Moj PC  
0 0 hvala 0
13 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

To je "igranje" for petljama i ispisom.

14 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

znam ali koliko god pokusavao nikako da dobjem ono sto mi treba

Moj PC  
0 0 hvala 0
15 godina
offline
Programiranje u C-u - od svega pomalo

ovaj kod ispisuje 2 puta, na 2 različita načina sljedeće

abbbb

aabbb

aaabb

aaaab

aaaaa

 

prouči kod tu je to ista baza kao sa tim brojkama, malo modificiraj i vidi hoće li pomoći {#}


int main(void)
{
    int i, j, k;

    for (i=1;i<=5;i++)
    {
       for (k=1;k<=i;k++)
          printf("a");
       for (j=5-i;j>0;j--)
          printf("b");
       printf("\n");
    }

    i 2. način:

    for (i=1;i<=5;i++)
    {
       for (j=1;j<=5;j++)
       {
          if (i>=j)
             printf("a");
          else
             printf("b");
       }
       printf("\n");
    }

01101110 01101010 01101111 01101110 01101010 01101001
Moj PC  
0 0 hvala 0
13 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

evo ti rijesenje za prvi dio drugi sam radi vidis koji je princip petlji

int _tmain(int argc, _TCHAR* argv[])
{
    for (int i = 5; i >= 1; i--)
            {
                for (int j=i; j<=5; j++)
                {
                    printf("%d",j);
 
                }
                printf("\n");
            }
    for(int i=2;i<=5;i++)
    {
       for(int j=i;j<=5;j++)
       {
          printf("%d",j);
       }
       printf("\n");
    }
    return 0;
}

vlastoručni potpis
13 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
eagle05 kaže...

 

 

2. treba mi program da se ovo ispisuje:

 

555555555

  4444444 

   33333

    222

     1

evo rijesio sam i drugi iako sam napisa prije da necu pomocu dvodimenzionalnog polja znakova

int _tmain(int argc, _TCHAR* argv[])
{char polje[5][9]=
{{'5','5','5','5','5','5','5','5','5'}
,{' ','4','4','4','4','4','4','4',' '}
,{' ',' ','3','3','3','3','3',' ',' '}
,{' ',' ',' ','2','2','2',' ',' ',' '}
,{' ',' ',' ',' ','1',' ',' ',' ',' '}};
    for (int i = 0; i < 5; i++)
            {
                for (int j=0; j<9; j++)
                {
                    printf("%c",polje[i][j]);
 
                }
                printf("\n");
            }
   
    
    return 0;
}

vlastoručni potpis
15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
karaandrijan kaže...

evo rijesio sam i drugi iako sam napisa prije da necu pomocu dvodimenzionalnog polja znakova

To je varanje :P

 

#include <stdlib.h>
#include <stdio.h>

int main()
{
    int n, i, prazno=0, puno=9;
   
    for (n=5; n>0; n--)
    {
        for (i=0; i<prazno; i++)
            printf(" ");
           
        for (i=0; i<puno; i++)
            printf("%d", n);
       
        printf("\n");
       
        prazno++;
        puno-=2;
    }
   
    system("pause");
    return 0;
}

 

My computer once beat me at chess, but we got even after a round of boxing.
13 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
rustweaver kaže...
karaandrijan kaže...

evo rijesio sam i drugi iako sam napisa prije da necu pomocu dvodimenzionalnog polja znakova

To je varanje :P

 

 

 

 

a nije varanje :D u tom i je ljepota programiranja stvar se uvjek moze rijesiti na vise načina jos kad se sjetim ispita iz programiranja na prvoj  godini faksa

prof. ljuta ali nemoze nista jer nije specificirala na koji nacin oce da se zadatak rijesi

 

vlastoručni potpis
15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
eagle05 kaže...

Moze li mi neko napisati dva programa za ova dva zadatka:

Ako vec zicas rjesenje na forumu, barem se malo potrudi i stavi te brojeve unutar kôd stila kako bi ih mogao pravilno poravnati (buduci da se za kôd koristi monospace font), ovako mi mozemo samo nagadati kako bi ta tvoja umotvorina trebala izgledati.

My computer once beat me at chess, but we got even after a round of boxing.
14 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

  Može malo pomoć?

 

Napisati program koji ce ucitavati s tipkovnice cijele brojeve iz raspona [-10, 15] te brojati koliko puta se koji pojavio, sve dok se dva puta uzastopno ne unese broj koji ne pripada zadanom rasponu.

Ukoliko je samo jedan ucitani broj izvan raspona, potrebno ga je zanemariti.

Nakon provedenog ucitavanja brojeva, program ispisuje aritmeticku sredinu svih unesenih brojeva unutar zadanog raspona te broj koji se pojavio najveci broj puta.

 

#include <stdio.h>
#include <stdlib.h>
#define DG -10
#define GG 15
void main(void)
{
int broj, i, prekid=0;
int brojac [26] = {0}; //int brojac [GG-DG+1] = {0}
int brbr=0; //broj unesenih brojeva
int zbroj=0; //zbroj unesenih brojeva
  int max; //najveci uneseni broj
do
{
printf("Unesite broj iz intervala [-10,15]:");
  scanf("%d", &broj);
if(broj >= DG && broj <= GG)
{
prekid=0;
brojac[broj-DG]++;
brbr++;
zbroj += broj;
  }
else
{
prekid++;
continue;
  }
  }while(prekid<2);
for(i=DG; i<=GG; i++)
{
if(brojac[i-DG] > 0)
  printf("\nBroj %d pojavio se %d puta.", i, brojac[i-DG]);
if(i == 0)
  max = brojac[i-DG];
if(max < brojac[i-DG])
max = brojac[i-DG];
  }
  printf("\nAritmetička sredina unesenih brojeva: %.2f", (float) zbroj/brbr);
  printf("\nBroj koji se je pojavio najviše puta: %d", max);
printf("\n\n");
}

Najveći uneseni broj me muči. Kako bi se to moglo riješiti?

U for petlji, zadnja dva if-a (koja su bila za probu) mi izbacuju koliko puta se je pojavio najviše pojavljivani broj, a ne koji je to broj.

 

EDIT: da sam znao da će mi ovako ružno ispasti post ne bih se ni trudio

 

Your Ego Is Writing Checks Your Body Can't Cash
Poruka je uređivana zadnji put sri 11.4.2012 21:08 (Gain).
Moj PC  
0 0 hvala 0
15 godina
offline
Programiranje u C-u - od svega pomalo

Probaj ovako: http://sg.answers.yahoo.com/question/index?qid=20080402051606AAqA4Af

umjesto jednodimenzionalnog polja koristi dvodimenzionalno gdje je drugi stupac broj pojavljivanja... onda samo još u jednoj petlji nađeš najveći broj u drugom stupcu i zapamtiš njegov index retka i eto ga :)

01101110 01101010 01101111 01101110 01101010 01101001
Moj PC  
0 0 hvala 1
13 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
Gain kaže...

  Može malo pomoć?

 

Napisati program koji ce ucitavati s tipkovnice cijele brojeve iz raspona [-10, 15] te brojati koliko puta se koji pojavio, sve dok se dva puta uzastopno ne unese broj koji ne pripada zadanom rasponu.

Ukoliko je samo jedan ucitani broj izvan raspona, potrebno ga je zanemariti.

Nakon provedenog ucitavanja brojeva, program ispisuje aritmeticku sredinu svih unesenih brojeva unutar zadanog raspona te broj koji se pojavio najveci broj puta.

 

 

evo ga radi malo je neuredno ali radi moze se jos optimizirat ali mi se nije dalo :D

int _tmain(int argc, _TCHAR* argv[])
{
    int broj;
int promasaj=0;
int brojunesenih=0;
int brojac[26];//broji koliko je koji broj puta unesen
int sume[26];//zbraja sumu za svaki broj koji smo unujeli moguce i bez ovoga
for(int m=0;m<26;m++)//postavljamo sadrzaj oba polja na 0
{
    brojac[m]=0;
    sume[m]=0;
}
    do
    {
       printf("\nUnesi broj  ");
          scanf("%d",&broj);
          if(broj>=-15&&broj<=10)
          {
             brojac[broj+15]++;
             sume[broj+15]+=broj;
             brojunesenih++;
             promasaj=0;
          }
          else
          {
             promasaj++;
          }

    }
    while(promasaj<2);
    int maxcount=brojac[0];
    int max=0;
    for(int i=0;i<26;i++)
    {
       if(brojac[i]>maxcount)
       {maxcount=brojac[i];
          max=i;
       }
    }
    printf("Najvise je puta je unesen broj %d ",max-15);
    int suma=0;
    for(int j=0;j<26;j++)
    {
       if(brojac[j]!=0)
       {
          suma+=sume[j];
       }

    }
    float k=(float)suma/brojunesenih;
    printf("\n Artimeticka sredina unesenih brojeva je %f  \n",k);


   
   

    
    return 0;
}

Edit: jebga krivo procita zadatak moj prog radi u intervalu od {-15,10} ali ustvari to nista ne mijenja :D

vlastoručni potpis
Poruka je uređivana zadnji put čet 12.4.2012 1:06 (karaandrijan).
14 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Hvala na pomoći.

Jutros, maloprije, sam završio zadatak (nisam ga radio cijelu noć da ne bi bilo zabune {#}.

Dodao sam varijblu n=0 i u for petlji izbrisao zadnja dva if-a i dodao:

 

if (brojac[i-DG] != 0 &&  brojac[i-DG] > n)

{

          n = brojac[i-DG];

          max = i;

}

Your Ego Is Writing Checks Your Body Can't Cash
Moj PC  
0 0 hvala 0
16 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Imam ovu knjigu i po njoj ucim programiranje u C-u. http://www.moj-posao.net/HR/Books/Details/393/C-osnove-programiranja/

Ostala su  mi jos dva poglavlja do kraja i naravno trebati ce mi neko vrijeme da usvojeno znanje dobro izvjezbam i potvrdim i u praksi na zadacima, no zanima me kada zavrsim s tom knjigom gdje dalje nastaviti uciti i s cime? Moze preporuka neke knjige? A moze i online tutoriali ili nesto slicno.

 
0 0 hvala 0
13 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

Završi ti tu.

16 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Pitam unaprijed jer trenutno imam novaca koji bi mogao izdvojiti za kupovinu knjige, a kasnije tko zna kako ce biti.

 
0 0 hvala 0
Nova poruka
E-mail:
Lozinka:
 
vrh stranice