C/C++

GlaDOS

Surreal Fag
Член од
27 март 2012
Мислења
141
Поени од реакции
38
Здраво ми треба помош околу одредена задача. Пробав да решам нешто но заглавив, еве ја задачата. Да се креира програма која преку функции ќе врши претворање на внесени евра и долари. Вредноста на евро 65,1 а на доларот е 45,2. Еве како јас ја започнав задачата :

Код:
include <iostream>
using namespace std
double evra (int denari)
{
return denari/65.1
}
double dolari (int denari)
{
return dolari/45.2
и толку. А втората задача е, Да се најде аритметича средина со функции. 1+2+3+....n целото тоа врз n
 
L

Luki Junior

Гостин
Здраво ми треба помош околу одредена задача. Пробав да решам нешто но заглавив, еве ја задачата. Да се креира програма која преку функции ќе врши претворање на внесени евра и долари. Вредноста на евро 65,1 а на доларот е 45,2. Еве како јас ја започнав задачата :

Код:
include <iostream>
using namespace std
double evra (int denari)
{
return denari/65.1
}
double dolari (int denari)
{
return dolari/45.2
и толку. А втората задача е, Да се најде аритметича средина со функции. 1+2+3+....n целото тоа врз n
Цената на еврото и на доларите ги стави у константи... Поарно е..
А втората
Код:
int n;
double average;
int sum=0;
 
average=n*(n+1)/2; //no loop
for(int i=1; i<=n; i++) //with loop
{
  sum +=  i;
}
average=double(sum)/n;
 

GlaDOS

Surreal Fag
Член од
27 март 2012
Мислења
141
Поени од реакции
38
а како би била првата ? Пошто кога пробав да ги ставам во константа програмта не работеше ?
--- надополнето: 27 ноември 2012 во 10:34 ---
Еве како продолжив, но не е довршена. Ако може некој да ја доврши би му бил благодарен.

Код:
#include <iostream>
using namespace std;
double evra(int denari)
{
return denari/61.5;
}
double dolari(int denari)
{
return denari/45.2;
}
int main()
{
int denari;
cout<<"Vnesete denari"<<endl;
cin>>denari;
switch(denari)
case '1'
cout<<evra(denari)
break;
case '2'
cout<<dolari(denari)
break;
 
M

Mr.InF3ction

Гостин
Ај прво пробај читај тука. И после обиди се да ја да решиш сам. Пошто тебе изгледа синтаксата ти е проблем него самата задача.
И одкако ќе читаш денари, во друга променлива читај некој број ...кај што ќе се случува нешто во зависност дали е внесен 1 или 2..
 
Член од
1 јули 2008
Мислења
165
Поени од реакции
19
а како би била првата ? Пошто кога пробав да ги ставам во константа програмта не работеше ?
Еве како продолжив, но не е довршена. Ако може некој да ја доврши би му бил благодарен.
Stavi pred denari (double) denari, zatoa sto denari ti se integer, a 42.2 ti e double, so toa ke kastiras promenliva i ke dobies nova double promenlive
 
M

Mr.InF3ction

Гостин
Cayman

При аритметичка операција со int - double резултатот е double не мора да кастира ништо.
 

Boomerang

Немој CTRL+W.
Член од
18 јуни 2006
Мислења
3.709
Поени од реакции
809
Да се напише програма во која користејќи рекурзивна функција
која прима два аргументи ќе се испечати во форма на палиндром
зборот чија средна буква е првиот аргумент на функцијата, а крајните
букви (кои се исти) се претставени со вториот аргумент.
Меѓу средната и крајните букви треба да се стојат буквите
кои се наоѓаат меѓу средната и крајните букви во азбуката.
Пр. за внесени аргументи (a,c) излез: cbabc

Код:
#include <stdio.h>
#include <stdlib.h>
void palindrom(char buk1, char buk2)
{
if(buk1>=buk2)
{
printf("%c",buk1);
return;
}
printf("%c",buk2);
palindrom(buk1,--buk2);
palindrom(++buk2,buk1);
}
 
int main()
{
char buk1,buk2;
scanf("%c%c",&buk1, &buk2);
palindrom(buk1,buk2);
system("PAUSE");
return 0;
}

Еве да речеме дека како аргументи ќе ги внесеме buk1='r' и buk2='w'. Е сега, јасен ми е делот додека ф-јата ги печати:


w v u t s r


Ама не ми е јасно откако ќе помине условов:

Код:
if(buk1>=buk2)
{
printf("%c",buk1);
return;
, што прави return?

Како ф-јата знае дека треба да прави рекурзивен повик, ама со 2-рата ф-ја, а не оди на првата? Ако може некој да ми објасни, по можност и малку повизуелно, и како ова работи у RAM, би бил многу благодарен :).
 
Член од
10 јули 2012
Мислења
87
Поени од реакции
54
Код:
#include <stdio.h>
#include <stdlib.h>
void palindrom(char buk1, char buk2)
{
    if(buk1>=buk2)
    {
        printf("%c",buk1);
        return;
    }
    printf("%c",buk2);
    palindrom(buk1,--buk2);
    palindrom(++buk2,buk1);
}
. . .не ми е јасно откако ќе помине условов, што прави return?

Како ф-јата знае дека треба да прави рекурзивен повик, ама со 2-рата ф-ја, а не оди на првата? Ако може некој да ми објасни, по можност и малку повизуелно, и како ова работи у RAM, би бил многу благодарен :).
За да ги разбереш задачиве, нај добро пробај реализирај ги на лист, мада оваа функција е напишана многу лошо, без потреба е изкомплицирана и не се гледа многу јасно смислата на рекурсијата, но ајде прво да пробаме за оваа.

Нека buk1 = а и buk2 = с. Како бројки (int) а = 97, с = 99.

На првото извикување:
Код:
palindrom(a,c)
{
    (97 >= 99) X
    print(c);
    palindrom(a,b)              (1)
    palindrom(b,a)              (2)   -> малку смотано е реализирана, затоа тешко можеш да приметиш
                                         дека тука нема да е palindrom(d,a) 
 
}
Редот на извикување е тој, функцијата си се вика самата и додека трае рекурсијата, функцијата (2) неможе да се исполни, таа е веќе извикана, но не може да дојде на ред :) Програмата не треба да знае дали да прави рекурзивен повик кон првата или кон втората, просто треба некако да се прекине тоа пре-извикување и да се продолжи кон извикувањето на 2рата функција. Во почетокот 2рата функција само се трупа. Епа тоа прекинувањето е направено од условот. Еве како ќе иде:
Код:
palindrom(a,c)
{
     print(c)
     palindrom(a,b)                 (1)   (прв пар)
     {
           print(b)
          palindrom(a,a)            (1)  (втор пар)
          {
                 print(a) -> return; -- веќе ќе почне да се исполнува 2рата функција
          }
          palindrom(b,a)            (2) (втор пар)
          {
               print(b)
          }
     }
   
 
 palindrom(c,a)                    (2) (прв пар)
     {
            print(c)
     }
}
Малку е тешко да се забележи, но 2рата функција само печати, никогаш нема да се преизвика самата, додека првата се преизвикува сама. Незнам колку можеше да ја сватиш до сега, но ако ако е напишана вака, функцијата работи исто, а е малку по едноставна.

Код:
void palindrom(char buk1, char buk2)
{
    if(buk1 >= buk2)
    {
        printf("%c", buk1);
    }
    else
    {
        printf("%c", buk2);
        palindrom(buk1, buk2 - 1);
        printf("%c", buk2);
    }
}
Тука важен е само делот
printf("%c", buk2);
palindrom(buk1, buk2 - 1);
printf("%c", buk2);
се печатат во парови, првата и последната, втората и пред-последната итн... На секое извикување на функцијата се печатат пар букви, освен кога условот е исполнет и тогаш ќе се испечати буквата што треба да е во средина.
Иначе return враќа резултат кон извикувачот на функцијата и го прекинува натамошното исполнување на кодот во функцијата, но во случајов дека е void не се враќа ништо, а return-от се користи за да се прекине кодот, а со тоа и преизвикувањето. Во функцијата што ти ја напишав може исто да се направи со return. Просто го тргаш else-от, а горе во условот, од долу ставаш return, дури и да не го тргнеш else-от ќе е исто.
 

StarScr3am

Ѓавол
Член од
22 септември 2009
Мислења
798
Поени од реакции
219
float y;
char z;
x=2; y=5; z='p';
Со која наредба ќе се испечатат вредностите на x,y,z така што ќе бидат одвоени со по едно празно место потоа ќе се премине во нов ред.
ај ако сакате помош :)
 
Член од
7 август 2012
Мислења
57
Поени од реакции
3
Да се напише програма во која од тастатура се внесува матрица со димензии М x N (М и N не се поголеми од 10). Програмата треба да ја трансформира матрицата на тој начин што секој елемент кој се наоѓа во парна редица и парна колона или непарна редица и непарна колона се заменува со производот од неговите соседи од десно, лево, горе и долу. Ако елементот се наоѓа во непарна редица и парна колона или парна редица и непарна колона тогаш елементот се заменува со производот од неговите дијагонални соседи. Ако за елементот не постојат сите соседни елементи, да се земат предвид само тие кои постојат.
 
Член од
11 октомври 2012
Мислења
12
Поени од реакции
0
Незнаев каде да пишам на друго место али ми треба помош околу програма што не е баш ептен кратка:

Еве ја задачата: па ако некој може да помогне, feel free :D

Направете датотека за наплата на дневни паркинг услуги. Капацитетот на паркингот е 200 возила дневно. Секое возило во датотеката има свој запис (record) кој се состои од следните полиња:
Опис на полето
Тип на податок
Макс. должина на поле или ранг на вредности
Име на сопственикот
string
15
Презиме на сопственикот
string
15
Регистарски број на возилото
string
9 (SK-001-AA)
Време на влез
int
HHMM
Дата на влез
int
GGMMDD


1. При внесување на влезните податоци да се прави валидација

2. На крајот од денот, датотеката се сортира (подредува) по Презиме, Име и регистарски број. На тој начин се формира датотеката “Sort.dat”.

3. Во гаражата има 20 паркинг места за клиенти кои имаат месечна претплата. Нивните податоци се запишани во првите 20 позиции во датотеката “Sort.dat”.

4. Датотеката “Sort.dat” да се користи како влезна датотека за добивање на цена на паркинг услугите. Цената за паркинг услугите е 40 денари од час. Доколку возилото се задржи помалку од еден час или еден час, цената е 40 ден. Доколку престојот надмине 1 час, цената е 10 денари за 10 минути за секој од наредните часови. Доколку се работи за клиент кој има месечна претплата, во полето за цена во излезот треба да излезе „Претплатен„.

5. Излезниот податок за корисникот на возилото да е од следниот тип:
Презиме:
Име:
Регистарски број:
Влез:
Цена:

 
Член од
24 октомври 2012
Мислења
11
Поени од реакции
2
Народее ве молам за помош!!! :/
Да се напише програма во која од тастатура се внесува матрица со димензии М x N (M и N не се поголеми од 10). Програмата треба да ја трансформира матрицата на тој начин што секој елемент ќе се замени со помалиот од следните два елементи: најмалиот елемент во истата редица десно од него и најмалиот елемент во истата колона под него. Ако елементот се наоѓа во последната редица се заменува со најмалиот елемент кој се наоѓа десно од него, а ако се наоѓа во последната колона се заменува со најмалиот елемент кој се наоѓа под него. Елементот во долниот десен агол од матрицата не се менува.
--- надополнето: 4 декември 2012 во 18:38 ---
 
M

Mr.InF3ction

Гостин
naturebum

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

BadMV

И ти исто така...
 

Kajgana Shop

На врв Bottom