C/C++

M

Mr.InF3ction

Гостин
Би требало да е исто како за Code::Blocks дека се многу слични
 
Член од
5 јануари 2008
Мислења
2.806
Поени од реакции
3.062
Го снимив Code blocks 10.05, и не му направив ништо во settings таква работа, го испробав дали ќе ми уклучи "hello world" , ми компајлираше.
После го ископирав кодот на задачата, и ми дава "gresno povikuvanje na alikacijata" process returned -1.

Отидов во project set programs arguments, и не ми отвара ништо.

Дали треба нешто да прилагодам на code blocks освен hilight mode > c/c++ ..?

И што е проблемот?

--- надополнето: 18 август 2012 во 16:22 ---



Уф го направив, фала многу! Ми работи програмата!
--- надополнето: 18 август 2012 во 16:37 ---
И сега како што гледам внатре во програмата нигде нема внесување на име на датотека?

Тоа значи дека внесување од "командна линија" , е преку Project>Set programs arguments ?

А во програмата воопшто не се внесуваат?
 
M

Mr.InF3ction

Гостин
Не знам дали си користел некогаш програми преку cmd...али еве најпрост пример ;
ping 192.168.0.1 -t
Името на програмата се вика ping а 192.168.0.1 и -t се аргументи што ги внесуваш за програмата. Е сега можело истото да се направи и во самата програма одкако ќе се пушти да пишува: внеси ип, внеси тоа...
Ама ете твојот пример ако имаш 2 дадотеки и сакаш да копираш содржина, за да завршиш побрзо работа одма при пуштање на програмата ги внесуваш и имињата на дадотеките..дека нели ти сега го правиш ова со IDE али некој би го користел програма преку CMD/terminal и полесно е во ист ред да куцаш да се пушти програмата и некои параметри да внесеше од старт..

Инаку внесување преку командна линија за во IDE е преку тоа set program arguments..а реално програма би го пуштил од CMD како што пишав горе:
imeNaprograma arguemtn1 argument2..
 
Член од
17 август 2012
Мислења
18
Поени од реакции
14
Не, нема што да внесуваш во програмата. Името на датотеката всушност ќе ти се наоѓа во argv[] кога ќе ја повикаш програмата преку командна линија.
Ова најчесто се прави преку command prompt, одиш до директориумот каде ти се наоѓа програмата, ја повикуваш, пишуваш име на датотека...
 
Член од
4 август 2011
Мислења
178
Поени од реакции
517
Да се напише програма која дадена текстуална датотека ќе ја промени на начин што секоја мала буква ќе ја промени во голема и обратно, додека останатите знаци од датотеката ќе останат непроменети. Изменетата содржина да се отпечати во друга датотека. Името на влезната и излезната датотека се задаваат од командна линија, а доколку не се зададени да се испечати начин на употреба на програмата.
#include<stdio.h>
int main(int argc, char *argv)
{
char c;
FILE *vlezna,*izlezna;
if(argc!=3)
{
printf(“Upotreba: %s ime_na_vlezna_datoteka\n”,argv[0]);
return (-1);
}
if((vlezna=fopen(argv[1],”r”))==NULL)
{
printf(“Ne mozam da ja otvoram datotekata %s\n”,argv[1]);
return(-1);
}
if((izlezna=fopen(argv[2],”w”))==NULL)
{
printf(“Ne mozam da ja otvoram datotekata %s\n”,argv[2]);
return(-1);
}
while((c=fgetc(vlezna))!=EOF)
{
if(isalpha(c))
{
if (isupper(c))
c==tolower(c);
else if(islower(c))
c==toupper(c);
}
}
fprintf(izlezna,”%c”,c) // ??? kako da se pecatat vo izleznata datoteka?
return 0;
}


Да се напише програма која ќе прочита датотека со име vlez.txt. Програмата треба да го испечати бројот на реченици во датотеката. Речениците завршуваат на некој од следниве знаци: “.” , “!”, “?”. Исто така програмата треба да го испечати бројот на знаци во најдолгата реченица.

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

 
Член од
17 август 2012
Мислења
18
Поени од реакции
14
За оваа задача, дали е мошно решение да ги избројам само знаците, и според нивниот збир да знам колку реченици има? Пример, да избројам три точки и два прашалника и да ми врати дека има пет реченици?
Можеш. Всушност така можеш и да ја најдеш должината(разликата од индексот на еден интерпукциски знак до предходниот).
 
M

Mr.InF3ction

Гостин
За првата задача не сфатив што е прашањето? Вака изгледа ок се само fprintf функцијата треба е во блоко погоре .во циклусот за знак по знак да ги пишува во излезната дадотека.

А за втората ќе ти треба променлива за број на знаци во реченица, една променлива што ќе чува макс знаци во реченица и една променлива за број на реченици.
И сега одкако ќе почнеш да читаш знак по знак цело време зголемуваш бројачот на знаци...кога ке прочиташ една од тие 3 знаци што се за крај на реченица тогаш зголемуваш број на реченици, проверуваш дали број на знаци во реченица е поголем од макс број на знаци, ако е тогаш правиш макс да е еднакво на тоа и ресетираш бројачот на знаци на 0. ..толку е
 
Член од
5 јануари 2008
Мислења
2.806
Поени од реакции
3.062
Во задачиве за испит што ми се, сегде пишува да се зададе името на датотеката преку командна линија..
Е јас не знам тоа да го правам, некое другарче мислам дека ми спомна нешо преку command promp. .. Ако може некој да ми каже како се прави тоа ?

Потоа исто не ми е јасно како програмата да провери дали на командна линија се зададени сите потребни аргументи?

После како и зошто да се печати начин на употреба на програмата?

Ако може некој најпросто да ми објасни што треба да напишам кога ќе ми ги пишува секој од овие работи, без многу навлегување.
 
Член од
10 јули 2012
Мислења
87
Поени од реакции
54
fprintf(izlezna,”%c”,c) // ??? kako da se pecatat vo izleznata datoteka?
fprintf и fscanf нај-често ти се користат за читање и запишување цели стрингови во фајл. За запишување само на еден карактер, како што сакаш во случајов, си има посебна функција fputc.
Дефинирана ти е како: int fputc(int c, FILE *stream);

Фактички тој ред горе, како прво, треба да се наоѓа во самиот циклус, зошто вака ти зимаш еден карактер, ги правиш тие проверки и трансформации врз него и не го запишуваш никаде, се дури не стигнеш до end of file (EOF) и тогаш променливата “с“ ќе ја има вредноста на последната буква, и неа ја запишуваш во “izlezna“.
- Како второ, операторот == што ги користиш, е оператор за еквивалентност ( проверува дали две работи се исти ) и со него не присвојуваш ниту присвојуваш ниту подесуваш вредност на нешто.
Од редот: с == tolower(c) ти добиваш како одговор дали “с“ е мала буква и целиот фрагмент:

Код:
if( isupper(c) )              -ако 'с' е голема
        c == tolower(c);   -провери дали 'с' е мала
- И како трето, би ти рекол да користиш fputc. Кодот од горе, само за запишувањето би требало да биде:

Код:
while( (c = fgetc(vlezna) )!= EOF)
{
        if( isalpha(c) )
        {
                if( isupper(c) )
                {
                       c = tolower(c);
                }
                else
                {
                      c = toupper(c);
                }
                fputc(c,izlezna);
        }
}
 
Член од
5 јануари 2008
Мислења
2.806
Поени од реакции
3.062
Како што сфатив јас секогаш кога ќе ми рече..

"ако не е испечатено имете преку командна линија испечати упатство за употреба."

ако нема име значи argc==1;

и тогаш..

PHP:
 if(argc==1)    //nema zadadeno ime?
(  printf("Upotreba : %s ime_na_datoteka.", argv[]);
return (-1);
  )
А кога ..
" Името се задава преку командна линија,ако не е зададено се чита од стандарден влез. ."

пак проверка дали има име..

PHP:
FILE *pd;
if(argc==1)
{
    pd=stdin;
}
else {
              bla bla bla..}
ако нема =stdin?" тоа е читање преку стандарден влез?

Точно е ова?

Проверување дали се зададени сите потребни аргументи?
тоа е
if(argc!=2) ???

што се смета за аргумент?

После во една задача пишува името на датотеката и бараниот збор се задаваат како аргументи од командната линја..
 
Член од
10 јули 2012
Мислења
87
Поени од реакции
54
Во задачиве за испит што ми се, сегде пишува да се зададе името на датотеката преку командна линија..
Како што прочитав од поранешниве постови, разбрав дека користиш Dev - Cpp. Од скоро го немам пипнато, али ајде. Таму мислам дека имаш опција од менито, (File->Save As или како и да е) да зададеш локација кај да ти се сними ЕХЕ-то од кога ќе го билднеш проектот. За да ти е по лесно сатави го во С:\ . Одкога ќе го направиш тоа, ако програмата ти се вика test, во С: треба да имаш фајл test.ехе .
И сега тој фајл(апликација - сеедно) можеш да го пуштиш од command prompt. Просто отвараш command prompt и пишуваш С:\test.ехе и штракаш ентер. И сега ако во кодот на test.ехе, во main функцијата ги имаш зададено тие параметри argc, argv, освен што (кога ќе сакаш да ја пуштиш програмата од command prompt) ќе напишеш С:\test.ехе можеш да додадеш и некакви други аргументи, на пример ти ќе ја зададеш локацијата на датотека, име на човек( ако програмата ти чува имиња итн...).

Ако на пример и датотеката ти се наоѓа на пример во С: и се вика prostiBroevi.txt. ти кога ќе ја извикаш од command prompt, за да ја зададеш локацијата на датотеката можеш да напишеш вака:
С:\test.ехе С:\prostiBroevi.txt (се во еден ред и одвоено со место - ако не се лажам).

И сега, тој аргумент, во случајов С:\prostiBroevi.txt, ќе биде зачуван во argv[ ], и зошто е прв параметар предаден преку command prompt, ќе биде зачуван во argv[ 1 ]. ( argv[ 0 ] e аргумент предназначен за локацијата на ехе-то на програмата или во случајов ќе ти биде С:\test.ехе )

И сега ти во кодот можеш да си го користиш argv[ 1 ] како нормален стринг( пример за да отвориш фајл )

Код:
FILE *fp;
fp = fopen( argv[ 1 ], "r" );
Иначе тој другиот аргумен, argc е цел број кој има вредност, бројот на аргументите што си ги дал преку cmd.

Еве ти проста програма, сними ја во С: и пушти ја преку cmd, али дај некакви аргументи, без врска нека се, одвоени со празно место и ќе видиш, би требало да ти се разјасни. Еве вака:

Код:
#include <stdio.h>
 
int main ( int argc, char *argv[ ] )
{
        for(int i = 0; i < argc; i++)
                printf("%s\n", argv[ i ] );
пуштија преку cmd на пример вака
C:\test.exe asdf afg sdth sdhg ae thsyt s4 6tsdfg6 s6uy 7fs :)
 
Член од
5 јануари 2008
Мислења
2.806
Поени од реакции
3.062
Задачата е лесна но ме интересира дали така се бројат редовите.
Програма што треба да го испечати бројот на редови, знаци (без празни места) и бројот на празни места.


PHP:
#include<stdio.h>
#include<ctype.h>
void pecati(FILE *pd)
{
    int i;
    for(;;)
    {
        if((i=fgetc(pd))==EOF)
        break;
        putchar(i);
    }
}
 
int main()
{
    int red=0,znak=0,praz=0,i=0;
    char s[80],c;
    FILE *pd;
    if((pd=fopen("text.txt","r"))==NULL)
    {
        printf("\n Neuspesno citanje na datotekata. \n");
        exit(1);
    }
    pecati(pd);
    rewind(pd);
    while((fgets(s,80,pd))!=NULL)
          {
              i=0; c=s[0];
              while(c!='\n')
              {
                  if(isalpha(c))
                  znak++;
                  else if(isspace(c))
                  praz++;
                  i++; c=s[i];
              }
              red++;
          }
          printf("\n Vo datotekata ima vkupno %d znaci, %d prazni mesta i %d redovi.\n",znak,praz,red);
 
 
          }
Oдносно дали е правилно
i=0; c=s[0];
while(c!='\n')
{
i++; c=s[i];
}

дас Треба да го имаме зададено до колку знаци од ред да зема така?
 
M

Mr.InF3ction

Гостин
А зошто правиш дупло работа земајки ред од дадотека во низа, па после во низата броиш знаци итн. Нема потреба од тоа од самиот текст фајл читај знак по знак брои што треба..само ќе ставиш и ако знакот е еднаков на нов ред да зголеми број на редови и тоа е.
Инаку кодот што прашуваш дали е правилно, ок е али ако направиш како што реков нема да имаш потреба од тоа.
 
Член од
19 август 2012
Мислења
2
Поени од реакции
1
Kje moze li nekoj da mi kaze kako kje bide main funkcijata na ovaa zadaca:
Da se napise rekurzivna funkcija sto kako vlezen argument prima cel broj.Funkcijata ja presmetuva sumata na cifrite na eden broj koi se naogjaat na neparnite pozicii gledano oddesno na levo.
pr: 35987594=4+5+8+5=22
Fala :)
 

Kajgana Shop

На врв Bottom