Programiranje u C-u - od svega pomalo izdvojena tema

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

Hvala Luuka, ovo je stvarno bilo brzo :)

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

U školi smo napravili program koji provjerava da li je unijeti broj savrsen ili ne.

 

Kod nam otprilike ide ovako:

 

#include <iostream>
using namespace std;
void Savrsen(int broj);
int main()
{
int broj ;
cout<<"Unesite broj : "<<endl;
cin>>broj;
Savrsen(broj);
system("pause");

return 0;
}
void Savrsen(int broj)
{
bool savrsen = false;
int zbroj = 0;
for(int i = 1;i<broj;i++)
{
if(broj%i==0)
{
zbroj+=i;
}
}
if(broj ==zbroj)
{
savrsen=true;
}
else
{
savrsen = false;
}
if(savrsen)
{
cout<<"Broj je savrsen!"<<endl;
}
else
{
cout<<"Broj nije savrsen!"<<endl;
}
}
Profesorica nam je zadala zadatak da ovo napravimo preko datoteke koristeci ofstream Izlaz, ali ja na koji god nacin uradim ne radi >.>

 

Ima li iko savjete?

IT'S RECORD TIME!
Moj PC  
0 0 hvala 0
16 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

Pretpostavljam da samo ispis ide u datoteku.

 

Sve napraviš isto, samo na kraju mala promjena:

 

ofstream izlaz("izlaz.txt");

if (savrsen) izlaz<<"Broj je savrsen!"<<endl;

else izlaz<<"Broj nije savrsen!"<<endl;

izlaz.close();

 

 

Btw kad pogledam tvoj kod, mogu samo reći - to se tak ne radi. Puno imaš beskorisnih varijabli i naredbi koje ti samo gomilaju kod. Uz to, funkcija bi trebala smao ispitati je li broj savršen ili nije, main se brine o ispisu.

 

Fukciju napravi ovako:

 

bool Savrsen(int broj)

{

      int zbroj=0;

      for (int i=1;i<broj;++i)

        if (broj%i==0) zbroj+=i;

 

     if (zbroj==broj) return true;

     return false;

}

 

a onda u mainu:

 

ofstream izlaz("izlaz.txt");

if (Savrsen(broj)) izlaz<<"Broj je savrsen!"<<endl;

else izlaz<<"Broj nije savrsen!"<<endl;

izlaz.close();

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
Poruka je uređivana zadnji put čet 12.5.2011 21:48 (Luuka).
15 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Pozdrav, da li bi mi netko mogao pomoći i ukratko opisati stringove?

Evo imam i primjer zadatka.

 

Napiši program koji će učitat neki string. Program treba ispisati svaki string ali tako da se svaki znak pojavljuje samo jedanput.

 

Ili.

 

Napiši program koji učitava n znamenkasti cijeli broj. Program treba ispisati koliki je zbroj broja x i y, gdje je x najmanji broj kojeg možemo dobiti pomoću znamenaka broja n, a y najveći.

 

Hvala unaprijed.

 

Got a gun, in fact I've got two, that's okay man, cause I love God
Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
Slash 666 kaže...

Pozdrav, da li bi mi netko mogao pomoći i ukratko opisati stringove?

Sto ti kod stringova nije jasno?

C string je obicno polje charova, ciji zavrsetak oznacava char koji ima vrijednost nula

 

Ono sto je bitno za shvatiti jest da je char:

  • 8 bitni broj koji moze imati vrijednost 0-255, te s njime mozes vrsiti racunske operacije kao i sa bilo kojim drugim brojem
  • 1 bajt u memoriji
  • broj kojem je ujedno dodjeljen i jedan od znakova iz ASCII tabele

 

Da bi to malo lakse probavio evo ti i prikladna slicica koju sam slozio (ponekad je lakse kad "vidis" nego kad ti pricaju):


 

 

Slash 666 kaže...
Napiši program koji će učitat neki string. Program treba ispisati svaki string ali tako da se svaki znak pojavljuje samo jedanput.

 

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

int main()
{
    char *slova, *string;
    int n;
   
    slova=(char*)calloc(255, 1);
    string=(char*)calloc(1024, 1);
   
    gets(string);
   
    for (n=0; n<strlen(string); n++)
    {
        if (!slova[string[n]])
           putchar(string[n]);
       
        slova[string[n]]++;
    }
    putchar('\n');
   
    free(slova);
    free(string);
   
    system("pause");
    return 0;
}

Nadam se da sam dobro shvatio sto treba napraviti...

 

Slash 666 kaže...
Napiši program koji učitava n znamenkasti cijeli broj. Program treba ispisati koliki je zbroj broja x i y, gdje je x najmanji broj kojeg možemo dobiti pomoću znamenaka broja n, a y najveći.

 

E sad ovaj mi zadatak nije skroz jasan, postoje dvije mogucnosti. Ako uneses broj 231, da li se moraju iskoristiti sve znamenke da se dobije najveci moguci broj -> 321 , ili se moze koristiti samo jedna (najveca) znamenka -> 333.

 

Posto je ovo drugo trivijalno, a ovo prvo po mojoj racunici zahtjeva nekakvo sortiranje, ja cu se pozabaviti prvim:

 

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

#define ASCENDING  1
#define DESCENDING 2

char* bubble_sort(char* input, char order)
{
      char temp, c=1, *output;
      int n;
     
      output=(char*)calloc(strlen(input)+1, 1);
      strcpy(output, input);
     
      if (strlen(output)<2)
         return output;
          
      while(c)
      {
          c=0;
          for (n=0; n<strlen(output)-1; n++)
          {
              if (order==ASCENDING)
              {
                  if (output[n]>output[n+1])
                  {
                     temp=output[n];
                     output[n]=output[n+1];
                     output[n+1]=temp;
                     c=1;
                  }
              }
              else
              {
                  if (output[n]<output[n+1])
                  {
                     temp=output[n];
                     output[n]=output[n+1];
                     output[n+1]=temp;
                     c=1;
                  }
              }
          }
     
      }
     
      return output;
}

int main()
{
    int broj, brojX, brojY;
    char *broj_c, *brojX_c, *brojY_c;

    broj_c=(char*)calloc(100, 1);
   
    printf("Upisi neki broj: ");
    gets(broj_c);
       
    brojX_c=bubble_sort(broj_c, ASCENDING);
    brojY_c=bubble_sort(broj_c, DESCENDING);
   
    broj=atoi(broj_c);
    brojX=atoi(brojX_c);
    brojY=atoi(brojY_c);
   
    printf("\nBroj je: %d\nNajmanji broj je: %d\nNajveci broj je: %d\n", broj, brojX, brojY);
    printf("Zbroj najmanjeg i najveceg broja je: %d\n", brojX+brojY);
   
    free(broj_c);
    free(brojX_c);
    free(brojY_c);
   
    system("pause");
    return 0;
}

So then I typed GOTO 500 - and here I am!
15 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

E puno ti hvala, ali problem je što ja ne znam nijednu od tih varijabli.

Sve što ja znam, i s čime trebam rješiti zadatak su strlen, if, i for petlje.

Ništa više.

I obični scanf i printf naravno.

 

Opet, puno hvala na pojašnjenu char-a i stringa.

Got a gun, in fact I've got two, that's okay man, cause I love God
Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

Pa onda ovako:

 

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

int main()
{
    char slova[256], string[100];
    int n;
   
    for (n=0; n<256; n++)
        slova[n]=0;
       
    scanf("%s", string);
   
    for (n=0; n<strlen(string); n++)
    {
        if (!slova[string[n]])
           printf("%c", string[n]);
      
        slova[string[n]]++;
    }
    printf("\n");
   
    system("pause");   
    return 0;
}

 

A ovaj drugi cu jos vidjeti kako bih ga pojednostavnio...

So then I typed GOTO 500 - and here I am!
Poruka je uređivana zadnji put pon 30.5.2011 20:03 (rustweaver).
15 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Hvala ti puno, savršeno radi.

Jel mi možeš reći zašto si ovo napisao na vrhu? jel se ikako može bez toga ili? Ne znam kako ću profesoru objasniti odkud mi to jer to isto nismo učili.

#include <string.h>

Got a gun, in fact I've got two, that's okay man, cause I love God
Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
Slash 666 kaže...

Hvala ti puno, savršeno radi.

Jel mi možeš reći zašto si ovo napisao na vrhu? jel se ikako može bez toga ili? Ne znam kako ću profesoru objasniti odkud mi to jer to isto nismo učili.

#include <string.h>

Naravno da ste ucili, da bi koristio strlen funkciju moras ukljuciti header string.h

So then I typed GOTO 500 - and here I am!
15 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Stvarno nismo.

Ja sam bez toga koristio i radi sasvim dobro.

Ma profesor je sav. Joj. On to zna, živi od toga, ali objašnjavanje mu nije jača strana.

Hvala ti puno na pomoći.

Got a gun, in fact I've got two, that's okay man, cause I love God
Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
Slash 666 kaže...

Stvarno nismo.

Ja sam bez toga koristio i radi sasvim dobro.

Nema sanse. Daj mi neki kôd u kojem ti strlen radi bez ukljucivanja string.h headera...

strlen je funkcija definirana u doticnom headeru, i da bi ju koristio taj header mora nekako biti ukljucen u tvoj program.

 

Vjerojatno koristis nekakav compiler koji tolerira svasta, a to nije dobro. Reci, u cemu programirate u skoli?

So then I typed GOTO 500 - and here I am!
Poruka je uređivana zadnji put pon 30.5.2011 20:23 (rustweaver).
15 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Evo, ovaj program svaki element u charu pomiče za jedno mjesto u desno, to jest jedno mjesto više u ASCII tabeli.

 

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

 

int main(int argc, char *argv[]){  char A[100];  int n,j,i,k  char tmp;  scanf("%s",A);  n=strlen(A);
  for(i=0;i<n;i++)  {    A[i]++;    if(A[i]==91) A[i]=65;    if(A[i]==123) A[i]=97;  }
  printf("%s \n",A);
  system("PAUSE");     return 0;}

Got a gun, in fact I've got two, that's okay man, cause I love God
Poruka je uređivana zadnji put pon 30.5.2011 20:23 (Slash 666).
Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
Slash 666 kaže...

Evo, ovaj program svaki element u charu pomiče za jedno mjesto u desno, to jest jedno mjesto više u ASCII tabeli.

Ovo ja dobijem:

 

12 test_strlen.cpp `strlen' undeclared (first use this function)

 

Compiler se buni. Koji IDE ti koristis?

So then I typed GOTO 500 - and here I am!
15 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Oprosti, ne znam što je IDE.

Koristim Dev-c ++ ako na to misliš.

Got a gun, in fact I've got two, that's okay man, cause I love God
Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
Slash 666 kaže...

Oprosti, ne znam što je IDE.

Koristim Dev-c ++ ako na to misliš.

E pa to je IDE (Integrated Development Environment)

 

Nemam pojma sto se tu dogada, ja takoder ovo pokusavam compilirati u Dev-u, i compiler se zali. Uglavnom nemoj se oslanjati na to sto ti radi, to uopce nije dobra praksa

 

EDIT: Evo i Watcom mi se zali. To su dakle 2 razlicita compilera, mogu ja jos probati i sa borlandovim i LCC-om ali nekako mi se cini da ce rezultat biti isti...

So then I typed GOTO 500 - and here I am!
Poruka je uređivana zadnji put pon 30.5.2011 20:45 (rustweaver).
15 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Okej, odsad ću to uključivati u programe.

Kažem, mi smo tako učili. U svakom slučaju hvala puno. Valjda ću uspjet pozitivno iz testa dobit.

Got a gun, in fact I've got two, that's okay man, cause I love God
Moj PC  
0 0 hvala 0
17 godina
moderator
online
Re: Programiranje u C-u - od svega pomalo
Slash 666 kaže...

Evo, ovaj program svaki element u charu pomiče za jedno mjesto u desno, to jest jedno mjesto više u ASCII tabeli.

 

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

 

int main(int argc, char *argv[]){  char A[100];  int n,j,i,k  char tmp;  scanf("%s",A);  n=strlen(A);
  for(i=0;i<n;i++)  {    A[i]++;    if(A[i]==91) A[i]=65;    if(A[i]==123) A[i]=97;  }
  printf("%s \n",A);
  system("PAUSE");     return 0;}

Ajde svi malo skupa lijepo razmislite o kodu koji pišete. Kako funkcija strlen "računa" duljinu stringa? Ide znak po znak pa vrati poziciju znaka \0, zar ne? Proučite sad ovo:

 

  n=strlen(A);  for(i=0;i<n;i++)

 

Tu se dvaput prolazi kroz cijeli string dok se ne dođe do nul-znaka! Funkcija strlen uopće nije potrebna (a s njoj i onaj header), nego treba samo jedna pametna petlja.

 

int i=0;

 

while (A[i] != '\0') {

  ...

 

  i++;

}

 

 

I to je to. Zapravo iz toga koda se da izvući i funkcija strlen:

 

int strlen(char *A){

  int i=0;
  while (A[i] != '\0') i++;

  return i;

}

 

(ne znam dal ovo prolazi - nisam baš upućen u to kako se šalju polja charova kao argumenti - ali mislim da bi trebali skužiti poantu).

Poruka je uređivana zadnji put pon 30.5.2011 20:38 (mbaksa).
15 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Hvala na trudu i pokušaju objašnjenja, ali što se tiče programiranja skoro pa sam potpuni laik.

Ovaj kod je profesorov, nije moj.

Got a gun, in fact I've got two, that's okay man, cause I love God
Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
mbaksa kaže...

int strlen(char *A){

  int i=0;
  while (A[i] != '\0') i++;

  return i;

}

 

(ne znam dal ovo prolazi - nisam baš upućen u to kako se šalju polja charova kao argumenti - ali mislim da bi trebali skužiti poantu).

Prolazi, dobro si definirao argument.

So then I typed GOTO 500 - and here I am!
17 godina
moderator
online
Re: Programiranje u C-u - od svega pomalo
Slash 666 kaže...

Hvala na trudu i pokušaju objašnjenja, ali što se tiče programiranja skoro pa sam potpuni laik.

Ovaj kod je profesorov, nije moj.

Pokaži mu ovu moju izmjenu pa pitaj što misli o tome. {#} U programiranju, pogotovo u učenju programiranja, treba razmišljati malo šire, ne se ograničavati. Njegov kôd je klasičan, ali ne ulazi u srž "problema".

 

Zapravo je situacija zanimljiva - takav kod je iskoristiv kad su u pitanju nul-terminated stringovi (polja sa znakovima kod kojih je znanji znak nul-znak i on kaže da je tu kraj stringa). Međutim, to nije iskoristivo kod drugih vrsta stringova - ne znam kakva je situacija u C/C++-u, no recimo u Pascalu duljina stringa je zapisana u njegovom nultom znaku - znači string[0] nije prvi znak stringa, nego duljina stringa. S tim je jasno da će funkcija za vraćanje duljine stringa biti ekspresno izvršena.

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

Uf, rađe ne bih. Samo ću navući njegov bijes, a to mi ne treba dok se za dvojku borim.

Inače nisam glup, i imam razvijenu logiku, ali nekako sam zaglibio u ovome.

Got a gun, in fact I've got two, that's okay man, cause I love God
Moj PC  
0 0 hvala 0
17 godina
offline
Programiranje u C-u - od svega pomalo

Napiši program koji učitava n znamenkasti cijeli broj. Program treba ispisati koliki je zbroj broja x i y, gdje je x najmanji broj kojeg možemo dobiti pomoću znamenaka broja n, a y najveći.

 

 

što se ovdje traži?

npr 1594

najmanji - 1

najveći - 9

rezultat - 10

 

je li to cilj

 

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

Ne.

Dakle, imaš broj 132.

Najveći broj koji možeš dobiti od njegovih znamenaka je 321, a najmanji 123.

Sad, ta 2 broja treba zbrojiti.

Got a gun, in fact I've got two, that's okay man, cause I love God
Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

Do kolko ti je n?

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

N je dužina stringa u kojem je unesen broj.

Got a gun, in fact I've got two, that's okay man, cause I love God
Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

I koja je maksimalna duljina tog stringa?

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

Zar je bitno? Nemam pojma.

Got a gun, in fact I've got two, that's okay man, cause I love God
Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

Bitno je, ako je neki mali, mozes spremat u broj, inace si prisiljen radit puno kompliciranije sa stringovima.

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

Ma broj može imat N znamenaka, tako da.

Got a gun, in fact I've got two, that's okay man, cause I love God
Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

Haha, znam. Pitanje je, kolko je taj N, odnosno do kolko moze bit taj N? Koja je najveca vrijednost koju N moze postic?

Nova poruka
E-mail:
Lozinka:
 
vrh stranice