Programiranje u C-u - od svega pomalo izdvojena tema

poruka: 1.661
|
čitano: 388.965
|
moderatori: Lazarus Long, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
17 godina
moderator
online
Re: Programiranje u C-u - od svega pomalo

Mislim da bi n trebao biti neke male duljine jer inače te znamenke ne bi mogao pretvoriti u broj i računati s takvim brojem. A program zahtijeva matematičke operacije. Odnosno, trebao bi implementirati i svoj algoritam za zbrajanje brojeva koji su zapisani kao stringovi.

 

Osim toga, traži se da se učita n-znamenkasti broj, a ne niz od n znamenki. Tako da se osoba koja je sastavila ili zadala zadatak nema što buniti. {#}

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

Al u tom je slucaju zadatak trivijalan i poprilicno lagan. Ako je n veci, zadatak je 5 minuta za iskodirat. 

 

EDIT: Sad cu krenut kodirat.

Poruka je uređivana zadnji put pon 30.5.2011 21:49 (ja čovjek).
15 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Rjesenje malo prije navedenog zadatka.

 

#include<iostream>

 

#include<cstdio>

#include<cmath>

#include<cstdlib>

#include<cstring>

#include<algorithm>

using namespace std;

char buff[500];

int a[500],b[500];

int main(){

   scanf(" %s", buff);

   sort(buff, buff+strlen(buff));

   for (int i=0; buff[i]; ++i){

     b[strlen(buff)-1-i]=a[i]=buff[i]-'0';

   }

   for (int i=0; buff[i]; ++i){

     a[i]+=b[i];

     a[i+1]+=a[i]/10;

     a[i]%=10;

   }

   for (int i=0; buff[i]; ++i){

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

     if (!buff[i+1]&&a[i+1]) printf("%d", a[i+1]);

   }

   printf("\n");

 

   return 0;

}

 

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

Mislim da bi n trebao biti neke male duljine jer inače te znamenke ne bi mogao pretvoriti u broj i računati s takvim brojem. A program zahtijeva matematičke operacije. Odnosno, trebao bi implementirati i svoj algoritam za zbrajanje brojeva koji su zapisani kao stringovi.

 

Osim toga, traži se da se učita n-znamenkasti broj, a ne niz od n znamenki. Tako da se osoba koja je sastavila ili zadala zadatak nema što buniti. {#}

 

A ne znam, više od 6, 7 znamenaka teško da će imat.

 

ja čovjek kaže...

Rjesenje malo prije navedenog zadatka.

 

#include<iostream>

 

}

 

 

Hvala na ovome Čovječe, ali pola ovih naredbi ne znam, kao što sam već naveo.

Sve što znam su if, for, strlen. Pomalo jadno za treći razred tehničara za računalstvo kad bolje pogledaš.

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 22:06 (Slash 666).
15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
Slash 666 kaže...
Hvala na ovome Čovječe, ali pola ovih naredbi ne znam, kao što sam već naveo.

Sve što znam su if, for, strlen. Pomalo jadno za treći razred tehničara za računalstvo kad bolje pogledaš.

Da zato si otkantao i ono moje rijesenje na prosloj stranici :P

Evo ti prosirena verzija, sada vise uopce nije citko, ali se ne koristi nista sto ti nisi ucio, pa neka ti je Bog na pomoci...

Prva petlja - kopira string, kad vec ne smijes koristiti memcpy i strcpy

Druge dvije petlje, sortiraju string

Poslijednje tri petlje, pretvaraju string u broj, u biti slicno sto i atoi samo primitivnije...

 

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

int main()
{
    long broj, brojX, brojY, n, mnozitelj;
    char broj_c[100], brojX_c[100], brojY_c[100], c, temp;
  
    printf("Upisi neki broj: ");
    scanf("%s", broj_c);
   
    n=0;
    while (broj_c[n])
    {
          brojX_c[n]=broj_c[n];
          brojY_c[n]=broj_c[n];
          n++;         
    }
    brojX_c[n]=0;
    brojY_c[n]=0;
   
    c=1;
    while(c)
    {
          c=0;
          n=0;
          while(brojX_c[n+1]!=0)
          {
              if (brojX_c[n]>brojX_c[n+1])
              {
                 temp=brojX_c[n];
                 brojX_c[n]=brojX_c[n+1];
                 brojX_c[n+1]=temp;
                 c=1;
              }
              n++;
          }
    
    }
   
    c=1;
    while (c)
    {
          c=0;
          n=0;
          while(brojY_c[n+1]!=0)
          {
              if (brojY_c[n]<brojY_c[n+1])
              {
                 temp=brojY_c[n];
                 brojY_c[n]=brojY_c[n+1];
                 brojY_c[n+1]=temp;
                 c=1;
              }
              n++;
          }
    
    }
  
    mnozitelj=1;
    broj=0;
    for (n=strlen(broj_c)-1; n>=0; n--)
    {
        broj+=(broj_c[n]-48)*mnozitelj;
        mnozitelj*=10;
    }
   
    mnozitelj=1;
    brojX=0;
    for (n=strlen(brojX_c)-1; n>=0; n--)
    {
        brojX+=(brojX_c[n]-48)*mnozitelj;
        mnozitelj*=10;
    }
   
    mnozitelj=1;
    brojY=0;
    for (n=strlen(brojY_c)-1; n>=0; n--)
    {
        brojY+=(brojY_c[n]-48)*mnozitelj;
        mnozitelj*=10;
    }
  
    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);
  
    system("pause");
    return 0;
}

 

Cak sam malo i for petlje preradio pa sada i mbaksa bude sretan, ali ne sumnjam da ce vec naci neki drugi propust...

Radi dobro do 9 znamenkastih brojeva, sa 10 znamenkastim mi se dogada overflow negdje, ali mi se sada ne da naganjavati ga...

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

Može i ovako, s tim da vrši provjeru je li upisan integer, ako nije traži ponovni upis:

 

 

#include <iostream>
using namespace std;
#include<stdio.h>
#include<stdlib.h>

void Najmanji(char* niz)
{
    int i, j;
    char pom;
    for(i=0; i < strlen(niz)-1; i++)
    {
       for(j=0; j< strlen(niz)-1-i; j++)
       {
          if(niz[j+1]  < niz[j])
          {
             pom = niz[j];
             niz[j] = niz[j+1];
             niz[j+1] = pom;
          }
       }
    }

}
void Najveci(char* niz)
{
    int i, j;
    char pom;
    for(i=0; i < strlen(niz)-1; i++)
       for(j=0; j< strlen(niz)-1-i; j++)
       {
          if(niz[j+1] > niz[j])
          {
             pom = niz[j];
             niz[j] = niz[j+1];
             niz[j+1] = pom;
          }
       }

}

int main()
{
    char niz[50];
    int najmanji, najveci, i, pom;
    do
    {
    printf("Unesi broj: ");
    scanf("%s", niz);
    pom = 0;
    for(i=0; i< strlen(niz); i++)
    {
       if(!isdigit(niz[i]))
       {
          pom = 1;
       }
    }
    }while(pom);
    Najmanji(niz);
    najmanji = atoi(niz);
    Najveci(niz);
    najveci = atoi(niz);
    printf("Rezultat: %d", najmanji + najveci);
    return 0;
}
  

Poruka je uređivana zadnji put pon 30.5.2011 22:24 (Floki).
 
0 0 hvala 1
15 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Hvala vam od srca.

Ne znam ni sam kad bi ovo sam rješio.

A to što ne znam ništa osim if, for i strlen nije moja krivica.

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 vam od srca.

Ne znam ni sam kad bi ovo sam rješio.

A to što ne znam ništa osim if, for i strlen nije moja krivica.

Problem je samo... ti to moras u testu napisati? Ne bi trebao strebati tudji kôd napamet, nego ga znati sâm napisati od nule... tj. moras znati sto program zapravo radi (algoritam), tada ces lagano i sam moci napisati nesto slicno.

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

Hvala vam od srca.

Ne znam ni sam kad bi ovo sam rješio.

A to što ne znam ništa osim if, for i strlen nije moja krivica.

to ti je čak dosta za ovo - samo dodati bubble sort metod i foru da koristiš dekadske vrijednosti char znakova + atoi funkcija

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

Znam, nit ne planiram napamet štrebat. Samo pokušavam to shvatit, a pošto nikako ne mogu to sam rješit, od nečega moram krenut.

Ostale zadatke još i kužim. Sve je super dok ne treba to u kod prenijeti. Trebam poraditi na tome.

 

EDIT: @floki

Rado, ali nemam pojma o čemu pričaš. Naime, nismo to UOPĆE učili.

Ako netko ima nekakav link do osnova u C-u, neka slobodno podjeli ovdje.

Ja sam tražio ali uvijek naletim na neke funkcije koje nikad u životu nisam vidio.

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 22:41 (Slash 666).
Moj PC  
0 0 hvala 0
17 godina
moderator
online
Programiranje u C-u - od svega pomalo

Ekipa - niste primijetili jednu jako bitnu stvar. Najveći i najmanji broj su "inverzni". Ako otkriješ jednog, drugi je ovaj prvi samo zapisan od kraja prema početki.

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

E, i sad, ako je taj broj u stringu, kako ga mogu u int izvući, da ga sa %10 pocjepam i obrnem znamenke?

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...

Ekipa - niste primijetili jednu jako bitnu stvar. Najveći i najmanji broj su "inverzni". Ako otkriješ jednog, drugi je ovaj prvi samo zapisan od kraja prema početki.

xD

 

Sad se osjecam glupo...

Ah dobro, jedno sortiranje manje-vise.

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

Ekipa - niste primijetili jednu jako bitnu stvar. Najveći i najmanji broj su "inverzni". Ako otkriješ jednog, drugi je ovaj prvi samo zapisan od kraja prema početki.

istina - ali kod bubble sorta što radim - iskopiam metod i obrnem znak < u >, he, he, manje posla nego pisati inverzni metod

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

E, i sad, ako je taj broj u stringu, kako ga mogu u int izvući, da ga sa %10 pocjepam i obrnem znamenke?

Zasto bi ga u int pretvarao? Pa lakse ti je raditi sa znakovima u stringu, ne?

 

Postupak je jednostavan, uzimas prvi element i zadnji element pa ih zamijenis, pa onda drugi element i predzadnji element pa ih zamijenis, do ne dodes do sredine, pa i taj srednji znak zamijenis sa tim istim srednjim znakom...

 

A mozes i sa dva polja ici, pa drugo polje samo punis unatrag i dobijes inverziju...

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

Ajmo reći da je A[100] prvi string, a B[100] drugi.

Imam broj 123 u stringu A.

Sad da ga učitam u B, B[0]=A[2]...i tako dalje.

Teoriju kužim.

Ali problem je napisati to, da funkcionira za bilo koji n broj.

Dobro, ne sad od 10000000 znamenaka ali, barem do 6, 7 znamenaka.

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
Floki kaže...
mbaksa kaže...

Ekipa - niste primijetili jednu jako bitnu stvar. Najveći i najmanji broj su "inverzni". Ako otkriješ jednog, drugi je ovaj prvi samo zapisan od kraja prema početki.

istina - ali kod bubble sorta što radim - iskopiam metod i obrnem znak < u >, he, he, manje posla nego pisati inverzni metod

Ts, ts, ts.

 

Sad kad mi već mozak radi 100 na sat, vidi ovo:

 

void Najmanji(char* niz, char smjer){    int i, j;    char pom;    for(i=0; i < strlen(niz)-1; i++)    {       for(j=0; j< strlen(niz)-1-i; j++)       {          if(niz[j+1]*smjer  < niz[j]*smjer)          {             pom = niz[j];             niz[j] = niz[j+1];             niz[j+1] = pom;          }       }    }}

 

Argument smjer može biti 1 ili -1 - ako je jedan, sortira se od najmanjeg prema najvećem, ako je -1, obratno.

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

Pito sam već, ali nitko nije vidio.

Jel ima netko link do neke knjige ili online tutoriala o osnovama C-a?

Ja sam tražio ali uvijek na nešto nerazumljivo naletim.

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

Nabavi ovu knjigu, provježbaj malo zadatke i položit ćeš vjerojatno

http://www.skolska.com.hr/hrv/page.asp?item=021154&act=add2basket

 

p.s. nije da nikog hvalim, ali vidim gdje  dečko šepa

Poruka je uređivana zadnji put pon 30.5.2011 23:04 (Floki).
 
0 0 hvala 1
17 godina
offline
Programiranje u C-u - od svega pomalo

E svaka čast za ovaj argument sa smjerom, zapamtim to, promjena znaka usporedbe predznakom brojeva uspoređivanja

Poruka je uređivana zadnji put pon 30.5.2011 23:02 (Floki).
 
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
Slash 666 kaže...

Ajmo reći da je A[100] prvi string, a B[100] drugi.

Imam broj 123 u stringu A.

Sad da ga učitam u B, B[0]=A[2]...i tako dalje.

Teoriju kužim.

Ali problem je napisati to, da funkcionira za bilo koji n broj.

Dobro, ne sad od 10000000 znamenaka ali, barem do 6, 7 znamenaka.

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

int main()
{
    char tekst[10]="Slash 666", temp;
    int n1, n2;
   
    n1=0;
    n2=strlen(tekst)-1;
   
    while (n1<n2)
    {
          temp=tekst[n1];
          tekst[n1]=tekst[n2];
          tekst[n2]=temp;
          n1++;
          n2--;
    }
   
    printf("%s\n", tekst);
    system("pause");  
    return 0;
}

Okrece stringove koliko god hoces duge...

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

Nabavi ovu knjigu, provježbaj malo zadatke i položit ćeš vjerojatno

http://www.skolska.com.hr/hrv/page.asp?item=021154&act=add2basket

 

p.s. nije da nikog hvalim, ali vidim gdje  dečko šepa

Eh, problem je što meni to treba za par dana, a i ovo je skupo.

Mislio sam na nešto online.

Rustweaver hvala još jednom, ak ti ikad išta zatreba iz grafičkog područja, javi, to mi je struka.

 

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 23:38 (Slash 666).
15 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Molio bih da mi odgovorite sto mi je krivo jer mi za svaki broj različit od nula vraca nula

evo koda:

 

#include <stdio.h>

double CN (int n){
if (n==0) return 5;
else if (n>0){return (((2*n)+3 )/((4*n)+7))*CN(n-1);}
}

int main()
{
    int n;
    scanf("%d",&n);
    printf("%g\n",CN(n));
    return 0;
}

Kake-Bake
Poruka je uređivana zadnji put sri 1.6.2011 14:31 (bandito).
 
0 0 hvala 0
17 godina
moderator
online
Re: Programiranje u C-u - od svega pomalo
bandito kaže...

Molio bih da mi odgovorite sto mi je krivo jer mi za svaki broj različit od nula vraca nula

evo koda:

 

#include <stdio.h>

double CN (int n){
if (n==0) return 5;
else if (n>0){return (((2*n)+3 )/((4*n)+7))*CN(n-1);}
}

int main()
{
    int n;
    scanf("%d",&n);
    printf("%g\n",CN(n));
    return 0;
}

Prvi broj u izrazu ti je tipa int, što znači da će cijeli izraz biti izračunat tako da se rezultat sprema u int. Dakle, prvi broj ti treba biti double - znači, dodaš točku iza dva.

 

else if (n>0){return (((2.*n)+3 )/((4*n)+7))*CN(n-1);}

 

Ili možeš napraviti casting u double.

Poruka je uređivana zadnji put sri 1.6.2011 14:59 (mbaksa).
15 godina
offline
Re: Programiranje u C-u - od svega pomalo

Promjeni int n u double.

I neka funkcija prima double.

 

Ili brže rješenje castaj si jedan od argumenata kod returna u double kao npr. :

else if (n>0){return (((double)(2*n)+3 )/((4*n)+7))*CN(n-1);

17 godina
moderator
online
Re: Programiranje u C-u - od svega pomalo
Zhawk kaže...
Ili brže rješenje castaj si jedan od argumenata kod returna u double kao npr. :

else if (n>0){return (((double)(2*n)+3 )/((4*n)+7))*CN(n-1);

Jedan -> PRVI. Zašto? Množenje i zbrajanje je OK, ali ako si već došao do dijeljenja i castaš ovo iza znaka za dijeljenje, rezultat će biti 0, jer je djeljenik int, a ne double. Treba jako biti oprezan s tim. Zato uvijek castašprvi pa si siguran (osim ako 100% nisi siguran u to što radiš).

15 godina
offline
Re: Programiranje u C-u - od svega pomalo

Zainteresirao si me sa ovime pa sam bacio brzi google. Nažalost nisam našao zadovoljavajuć odgovor.

Meni se čini da je ovo što si ti rekao vezano uz kompajler, koristim gcc koji ovo handla bez problema.

Tj. nisam nigdje našao da se u ANSI C-u govori o ovome. Vjerojatno nisam dovoljno istražio pošto sad nemam vremena ali na par mjesta sam našao info da je svejedno koji se casta.

 

Dodatak: http://stackoverflow.com/questions/2976011/how-do-you-divide-two-integers-and-get-a-decimal-answer

 

Poruka je uređivana zadnji put sri 1.6.2011 15:30 (Zhawk).
17 godina
moderator
online
Re: Programiranje u C-u - od svega pomalo

Probaj ovo pa ćeš vidjeti u kom grmu leži zec:

 

(((2*n)+3 )/(double)((4*n)+7))*CN(n-1);

15 godina
offline
Re: Programiranje u C-u - od svega pomalo

Probao i radi mi.

Poruka je uređivana zadnji put sri 1.6.2011 16:08 (Zhawk).
15 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Evo ja se opet javljam posto ste mi lijepo odgovorili:

imam dva zadatka koja mi ne rade kao ali ja neznam što je problem

edit: ovaj prvi sam sredio

U ovom drugom treba ispisati rijeci naopako i svaku šestu izbrisati a treba ih ispisati tako da idu jedan za drugom sa samo jednim razmakom a meni ovaj verifikator sto provjerava mi javlja gresku..

 

 

 

2.

Zadatak 2.

Napišite program koji učitava jednu liniju teksta s najviše 14826 znakova. Tom tekstu treba izbrisati svaku 6. riječ, a ostalima izokrenuti redoslijed slova (same riječi ostaju u originalnom poretku). Tako dobiveni tekst treba ispisati.
Možete pretpostaviti da tekst sadrži samo slova i razmake.

 

 

2.kod

#include<stdio.h>#include<ctype.h>#include<string.h>#include<stdlib.h>int brojac( char s[], int i ){while(1){    if(s[i]=='\0')    return i;    if(isblank(s[i])==1)    return i;    i++;        }return i;}

void zamjeni(char a[] ,int prvi_clan,int zadnji_clan){char temp;    while(prvi_clan<zadnji_clan){        temp=a[prvi_clan];        a[prvi_clan]=a[zadnji_clan];        a[zadnji_clan]=temp;        prvi_clan+=1;        zadnji_clan-=1;        }}

void makni_rijec(char a[], int prvi_clan, int j ){    while(a[j]!='\0'){    a[prvi_clan-1]=a[j];    prvi_clan++;    j++;    }a[prvi_clan]='\0';}
int main(){int prvi_clan=0, zadnji_clan=0;int i=0, br_rijeci=0, j;char a[14826];gets(a);while ( a[i] != '\0'){if(!isblank(a[i])){    br_rijeci++if(br_rijeci==6){    j=brojac(a, i);    makni_rijec(a , prvi_clan, j );    br_rijeci=0;    i++;                }else{    i=brojac(a, i);    zamjeni(a, prvi_clan, i-1);    prvi_clan=i-1;}}else    i++;prvi_clan++;}    puts(a);    return 0;}

Kake-Bake
Poruka je uređivana zadnji put sri 1.6.2011 18:38 (bandito).
 
0 0 hvala 0
Nova poruka
E-mail:
Lozinka:
 
vrh stranice