• Здраво и добредојдовте на форумот на IT.mk.

    Доколку сеуште не сте дел од најголемата заедница на ИТ професионалци и ентузијасти во Македонија, можете бесплатно да се - процесот нема да ви одземе повеќе од 2-3 минути, а за полесна регистрација овозможивме и регистрирање со Facebook и Steam.

[C/C++] Кружно пресметување, помош ?

  • Ја почнал/а темата
  • #1

''TcM>>

Intern
6 јануари 2008
961
39
Programava sto treba da ja napravam e sledna:

Da se izvrsi ciklicno pomestuvanje na bukvite vo nekoj zbor vnesen preku tastatura za n(ovoj broj e vnesen preku tastatura) mesta nalevo ili nadesno(ovoj izbor se vnesuva preku tastatura).!

Sum sedel so saati ama sabe ne mi teknuva kako, sum se obiduval sekako kako sto sum znael, edinstveno sto znam e deka treba da upotrebam i matrica nekako....
Pa ako moze nekoj da mi pomogne.. ve molam!
 

pudge

Intern
28 ноември 2007
128
1
imas niza, i taa niza na primer go sodrzi zborot "zdravo".
ako n=3 , i treba da se pomestat nalevo , zborot ke ispadne, ravo , ili ravozd (sea neznam ciklicno, dali da se vrtat u krug...)
mala pomos....
niza[0] = niza[n];

neznam dali ke raboti so shiftanje, kako so bitovi.... ali mozes da probas
 

DaciSS

Gaining Experience
3 јануари 2008
949
288
San Francisco
www.linkedin.com
ова може ќе ти помогне до некаде, во прва година на лабови основи на програмирање ја решававме

//Ciklicno pomestuvanje na elementi na niza za k mesta na desno
# include <iostream>
using namespace std;
void main ()
{
int a[20];
int i,j,k,n,pomosna;
cout<<"Vnesi kolku elementi ima nizata"<<endl;
cin>>n;
for (i=0;i<n;i++)
{
cout<<"a["<<i<<"]=";
cin>>a;
}
cout<<"Vnesi za kolku da se pomesti"<<endl;
cin>>k;
cout<<"Pocetnata niza izgleda vaka"<<endl;
for(i=0;i<n;i++)
cout<<a<<" ";
cout<<endl;
for (j=0;j<k;j++)
{
pomosna=a[n-1];
for (i=n;i>0;i--)
{
a=a[i-1];
}
a[0]=pomosna;
}
cout<<"pomestenata niza za "<<k<<" mesta izgleda vaka "<<endl;
for (i=0;i<n;i++)
cout<<a<<" ";
cout<<endl;
}
 

DaciSS

Gaining Experience
3 јануари 2008
949
288
San Francisco
www.linkedin.com
ова е најпросто, само да го примениш како што треба

Циклично поместување за к
места
Може да се реализира преку к пати ротирање
на низа за едно место (во лево или во десно)
за j←1 зголемувај до k
t←a1;
за i←1 зголемувај до n- 1
ai←ai+1;
крај_за {i}
an=t;
крај_за {j}
 
  • Ја почнал/а темата
  • #6

''TcM>>

Intern
6 јануари 2008
961
39
da mozda e lesno ama pa jas ne sum ekspert... I vo mojot kompajler nema toa sto e #include <iostream>, pa taka da ne mi e poznato nesto od toa cout<<;<<endl.....
Pa ako moze da mi se objasni malce podetalno, deka sum pocetnik, seuste ucam a i stvarno sakam da naucam..
:)
 

pudge

Intern
28 ноември 2007
128
1
epa ako ne si ekspert, ke si zemes knigicka i ke si citas, taka najdobro ke svatis, pa posle ako zaglais na nekoj problem togas prasaj.....vaka ispaga deka nekoj do tocka treba da ti objasnuva sto e sto.....

ama so ogleda na toa sto neznaes sto e toa cin, couit, ne si ni pocetnik....
 
  • Ја почнал/а темата
  • #8

''TcM>>

Intern
6 јануари 2008
961
39
Najjiskreno ako moze nekoj da mi ja napise programata u C bi bilo najjubavo deka iskreno mi treba za seminarska a sum se mucel i nikako ne mi tekinja
 

LiquidWorm

Администратор
26 март 2007
2,667
183
www.zeroscience.mk
ah "TcM>> домашни работи тука не пишуваме...да имаше некој проблем ВО кодот па да помогнеме...овака незнам :ermm:
 

DaciSS

Gaining Experience
3 јануари 2008
949
288
San Francisco
www.linkedin.com
кодот од првиот пример е пишуван во C++, а # include <iostream> значи вклучување на библиотеки за влез и излез (cin>>; cout<<;)

додека пак вториот пример не претставува конкретен програмски јазик, тоа е псевдо јазик за пишување на алгоритми што би требало секој да го разбере што барем малку е упатен во програмирање
 

DaciSS

Gaining Experience
3 јануари 2008
949
288
San Francisco
www.linkedin.com
за j←1 зголемувај до k //prv for ciklus
t←a1; // zacuvaj go privremeno prviot karakter od nizata
за i←1 зголемувај до n- 1 //vgnezden for ciklus
ai←ai+1; //inkrementiraj za 1
крај_за {i}
an=t;//elementot sto go imase zapamteno so bese prv, stavi go na posledna //posledna pozicija
крај_за {j}
znaci ako imas niza =tocak i sakas da ja siftas u levo. Prvo zacuvaj ja prvata bukva prvabukva=t, pa site bukvi odat za edno mesto vo levo, pa bukvata sto si ja zacuval stavi ja posledna, poslednabukva=prvabukva

...i ke se dobie ocakt // sekoja bukva e isiftuvana
 
  • Ја почнал/а темата
  • #14

''TcM>>

Intern
6 јануари 2008
961
39
Eve sum se iznamacil za da go pisam ova:

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

int main(int argc, char *argv[])
{
int n,i=0;
char k;

printf("\Vnesete za kolku mesta da se pomestat bukvite vo zborot: odgovor\n");
printf(":");
scanf("%d",&n);
printf("Dali sakate da se pomestat levo ili desno(pisete l za levo ili d za desno)\n");
printf(":");
scanf("%s",&k);
if(k=='l')
i=1;
while(n>7)
n=n-7;

if(n==1&&i==1)
printf("\n Noviot zbor e: dgovoro\n");
else if(n==1&&i!=1)
printf(" Noviot zbor e: rodgovo\n");

if(n==2&&i==1)
printf(" Noviot zbor e: govorod\n");
else if(n==2&&i!=1)
printf(" Noviot zbor e: orodgov\n");

if(n==3&&i==1)
printf(" Noviot zbor e: ovorodg\n");
else if(n==3&&i!=1)
printf(" Noviot zbor e: vorodgo\n");

if(n==4&&i==1)
printf(" Noviot zbor e: vorodgo\n");
else if(n==4&&i!=1)
printf(" Noviot zbor e: ovorodg\n");

if(n==5&&i!=1)
printf(" Noviot zbor e: orodgov\n");
else if(n==2&&i!=1)
printf(" Noviot zbor e: govorod\n");

if(n==6&&i==1)
printf(" Noviot zbor e: rodgvo\n");
else if(n==6&&i!=1)
printf(" Noviot zbor e: dgovoro\n");

if(n==7&&i==1)
printf(" Noviot zbor e: odgovor\n");
else if(n==7&&i!=1)
printf(" Noviot zbor e: odgovor\n");


system("PAUSE");
return 0;
}


I vo sustina toa e toa. Ama treba so zbor koj ke se vnese preku tastatura (odnosno za koj bilo zbor ne kako vo mojot slucaj samo za "odgovor") da se najde toa kruzno presmetuvanje...
 
  • Ја почнал/а темата
  • #15

''TcM>>

Intern
6 јануари 2008
961
39
potoa momentalno sto ja napraviv e ova:


int n,k,i;
char zbor[100];
char izbor[100];



printf("vnesete go zborot:");
scanf("%s", &zbor);
printf("\nVnesete za kolku mesta da se pomestat bukvite vo zborot %s\n",zbor);
printf(":");
scanf("%d",&n);
printf("Dali sakate da se pomestat levo ili desno\n");
printf(":");
scanf("%s",&izbor);


ama ne znam kako da ja pisam posle funkcijata.....

:lut2:
 

StenmarC

Intern
16 април 2007
716
13
stenmarc.blog.com.mk
Одамна не сум чепкал C. Aко има грешки немој да се смееш. 2 for циклуси се.



for (t=1; t<=n;t++)
{
temp = zbor[k-1] // k-1 e poslednata bukva od zborot. pocnuva od 0 do k-1.
for (i=k-1; i!=0; i--)
{
zbor=zbor[i-1];
}
zbor[0]=temp;
}

Tолку :) Ова е за во десно. За во лево ќе го препишеш истото.
Поздрав. Aко не ти е јасно што прави кодов, ќе ти пишам...
 
  • Ја почнал/а темата
  • #17

''TcM>>

Intern
6 јануари 2008
961
39
Pa aj ako mozes ziti se poobjasni mi malce poubavo, i dali ova sto go pisa e nadovrzano od moeto? Zatoa sto samo taka ima nedostatok. (za temp,t: undeclaret) (pa dali e temp od char, a t od int) (nemoj ni na mene da mi se smees ako sum pisal nesto bezveze:).)..


I uste nesto: kako da pisam za da se prepoznae dali e levo ili desno...pr: vo prviot obid imav pisano

printf("Dali sakate da se pomestat levo ili desno(pisete l za levo ili d za desno)\n");
printf(":");
scanf("%s",&k);
if(k=='l')
i=1;

i vaka se vnesuva samo 'l' ili 'd' za levo ili desno. Ama jas sakam da se vnesuva 'levo' ili 'desno' preku tastatura, ama uslov za taka ne mi tekinja...:zasramen:
 

StenmarC

Intern
16 април 2007
716
13
stenmarc.blog.com.mk
Одамна не сум чепкал C. Aко има грешки немој да се смееш. 2 for циклуси се.



for (t=1; t<=n;t++)
{
temp = zbor[k-1] // k-1 e poslednata bukva od zborot. pocnuva od 0 do k-1.
for (i=k-1; i!=0; i--)
{
zbor=zbor[i-1];
}
zbor[0]=temp;
}

Tолку :) Ова е за во десно. За во лево ќе го препишеш истото.
Поздрав. Aко не ти е јасно што прави кодов, ќе ти пишам...



Aјде малце пешки:)
Внатрешниот for циклус служи за да го премести секој во десно за едно поле освен последниот. Така да ако имаш zdravo, после завршување на внатрешниот for циклус, ќе имаш zzdrav.

Евет и пример, циклус по циклус што работи внатрешниот фор
циклус 1: zdravv
2: zdraav
3: zdrrav
4: zddrav
5: zzdrav

Пред почеток на внатрешниот циклус со командата temp=zbor[k-1] ја памтиме последната буква. Значи, после излезот од внатрешниот for, пошто имаме zzdrav, на прво место т.е. во овој случај кај C на нулто место ја ставаме последната буква и добиваме оzdrav. Надворешниот for служи за тоа колку пати да се повтори ова. Toa e oна за n во десно. K e бројот на букви во зборот. Мислам дека има вградена функција за пресметување. Не памтам... одамна беше :)

За лево ќе биде истото, само место последната буква, во temp ќе се чува првата буква, а сите други ќе се преместуваат во лево за еден и на крај буквата зачувана во temp ќе се стави на последно k-1 место.

За тоа со лево или десно, можеш да направиш case структура. Aко се одбере l или r да повика функција за лево, или за десно, во спротивно да јави грешка.


Мислам дека ти е доволно. Нема да ти го пишам цел код. Не очекувај да ти ја решам цела задача. Размилси, прочитај, научи малце. Ова во иднина ќе ти треба доколку мислиш да го работиш она што го студираш.
 
  • Ја почнал/а темата
  • #19

''TcM>>

Intern
6 јануари 2008
961
39
#include <stdio.h>
#include <stdlib.h>


int dolzina(char string[])
{
int count=0;
while(string[count]!='\0')
++count;
return count;
}

int main(int argc, char *argv[])
{
int dolzina(char string[]);
int n,k,a;
int i,t;
int temp;
char zbor[1000];
char izbor;

printf("vnesete go zborot:");
scanf("%s", &zbor);
k=dolzina(zbor);
printf("\nVnesete za kolku mesta da se pomestat bukvite vo zborot %s\n",zbor);
printf(":");
scanf("%d",n);
printf("Dali sakate da se pomestat levo ili desno\n");
printf(":");
scanf("%d",&n);

scanf("%s",&izbor);

switch(izbor)
{

case'l':
for (t=1; t<=n;t++)
{
temp = zbor[k-1];
for (i=k-1; i!=0; i--)
{
zbor=zbor[i-1];
}
zbor[0]=temp;
}
printf("Noviot zbor e: %s\n",zbor);
break;

case'd':
for (t=1; t<=n;t++)
{
temp = zbor[k-1];
for (i=k-1; i!=0; i--)
{
zbor=zbor[i-1];
}
zbor[0]=temp;
}
printf("Noviot zbor e: %s\n",zbor);
break;

default:
printf("Vnesete levo ili desno!\n");
}

system("PAUSE");
return 0;
}

ja eve kako do sea mi e ispadnato...
Ama finishov izglea me zaebava malce..na primer ako vnesam zbor -'zdravo', togas kolku i da mi e 'n' mi go dava zborot 'ravo'. A i za koj bilo zbor e taka, samo mi krati bukvi(na pr. za zborot 'kolku' mi ostanuva samo 'ku'). E zosto??

Ah i da uste nesto vikas deka taa funkcijata e ista za levo i desno....:)...
toa malce me buni znaes...:)

I mnogu ti fala za dosegasnava pomos...
 

StenmarC

Intern
16 април 2007
716
13
stenmarc.blog.com.mk
ja eve kako do sea mi e ispadnato...
Ama finishov izglea me zaebava malce..na primer ako vnesam zbor -'zdravo', togas kolku i da mi e 'n' mi go dava zborot 'ravo'. A i za koj bilo zbor e taka, samo mi krati bukvi(na pr. za zborot 'kolku' mi ostanuva samo 'ku'). E zosto??

Ah i da uste nesto vikas deka taa funkcijata e ista za levo i desno....:)...
toa malce me buni znaes...:)

I mnogu ti fala za dosegasnava pomos...

Прво кога мислев исто не мислев 100% исто, туку слично, само ќе се смени дел од кодот - нијанси.

Друго... имаш грешка затоа што к-должината на зборот не ја иницијализираш и не и доделуваш вредност. Значи, после oпциите на case структурата ќе додадеш k=dolzina(zbor), каде zbor e променливата во која се наоѓа зборот што треба да го вртиш.


Еве ти изменет едне дел....

Код:
case'l':
{
 k=dolzina(zbor);
for (t=1; t<=n;t++)
{
temp = zbor[k-1];
for (i=k-1; i!=0; i--)
{
zbor[i]=zbor[i-1];
}
zbor[0]=temp;
}
printf("Noviot zbor e: %sn",zbor);
break;
}
}
 
  • Ја почнал/а темата
  • #21

''TcM>>

Intern
6 јануари 2008
961
39
Sabe sefe.. ni taka nejke.. taka pak mi dava error i mi se gasi...

a ami K neli mi e inicijalizirana pogore:

printf("vnesete go zborot:");
scanf("%s", &zbor);
k=dolzina(zbor);
printf("\nVnesete za kolku mesta da se pomestat bukvite vo zborot %s\n",zbor);
printf(":");

a i ja proveriv dali tocno racuna, i tocna e (na pr. za zdravo k=6 ..)...

teee kolku znaci me ima iznervirano programavaaa :pcuenje:
 

Freak

Intern
9 јануари 2008
14
0
Dali nekoj moze da ja resi zadacava???

Да се намали редот на матрицата A=[аij]m*n внесена преку тастатура, со бришење на к-тата (овај врој е внесен преку тастатура) редица и р-тата (овој број е внесен преку тастатура) колона. :):ermm:
 

LiquidWorm

Администратор
26 март 2007
2,667
183
www.zeroscience.mk
Dali nekoj moze da ja resi zadacava???

Да се намали редот на матрицата A=[аij]m*n внесена преку тастатура, со бришење на к-тата (овај врој е внесен преку тастатура) редица и р-тата (овој број е внесен преку тастатура) колона. :):ermm:
Freak:

Избришан ти е постот со причина, ти пак постираш... прочитај правилата првин пред да постираш... тоа што прашуваш е офф-топик од оваа тема...за твоето прашање отвори нова тема (и да знаеш дека не пишуваме задачи само помагаме во кодот).

Благодарам.
 

StenmarC

Intern
16 април 2007
716
13
stenmarc.blog.com.mk
Кај кодов имам грешка. За 0 не проверува. Во фор циклусот, условот за излез од циклусот треба да биде i>=0, a не i!=0
Поправи го и на двете места...

case'l':
{
k=dolzina(zbor);
for (t=1; t<=n;t++)
{
temp = zbor[k-1];
for (i=k-1; i>=0; i--)
{
zbor=zbor[i-1];
}
zbor[0]=temp;
}
printf("Noviot zbor e: %sn",zbor);
break;
}
}
 
  • Ја почнал/а темата
  • #25

''TcM>>

Intern
6 јануари 2008
961
39
Pa programava bi trebalo da raboti super. Vo tetratka po ovoj for ciklus ja resiv 10o pati, ama vo kompajlerot po izvrsuvanjeto na naredbite, prvata bukva ja menuva vo toa sto e vneseno kako tastatura(l ili d, za levo ili desno) a i drugite zborovi si ostanuvaat po istiot redosled. E sto bi mozelo da mu bide problemot...
:confused: :confused: :confused: :confused: :confused:
 

Нови мислења

Последни Теми

Статистика

Теми
43,540
Мислења
822,863
Членови
28,054
Најнов член
malo92
На врв Дно