Exemple 1

Exemplu de lucru cu proiect in Turbo C++

Se creeaza un fisier cu urmatorul continut

#include <stdio.h>
#include <string.h>
char appFile(FILE *out,char *name,char *line){
if ((out=fopen(name,"a+t"))==NULL){
printf("Nu se poate deschide fisierul");return 1;
}
fwrite(line, strlen(line), 1, out);
fwrite("\n", strlen("\n"), 1, out);
fclose(out);
return 0;
}

Se salveaza intr-un fisier cu numele appfile.c.

Se creaza fisierul antet appfile.h avand urmatorul continut

extern char appFile(FILE *out,char *name,char *line);

Se scrie urmatorul cod

#include <stdio.h>
#include <string.h>
#include "appfile.h"
FILE *out;
void main(int argc, char **args){
if(argc>1){
appFile(out,"appfile.txt",args[1]);/*"o a treia linie");*/
printf("%s",args[1]);
}
}

si se salveaza intr-un fisier cu numele execapp.c.

In mediul TurboC se perge pe calea:

Project->Open project...->

Se creaza un proiect cu numele execapp.prj.

Se adauga pe calea 

Project->Add item..

cele doua fisiere .c create anterior: appfile.c si execapp.c (la sfarsit se da Cancel).

Se lanseaza comanda

Compile->Build all

Se introduc la linia de comanda urmatoarele:

execapp "o noua linie"

Dupa executie in folder apare un fisier cu numele appfile.txt continand urmatoarea linie:

o noua linie

Exemplu de lansare a unei aplicatii din alta aplicatie

Se creeaza un fisier cu urmatorul cod (execprg0.c)

#include <stdio.h>
#include <string.h>
#include <process.h>
#include <conio.h>

int main(int argc,char **args)
{
int result;

clrscr();
result = spawnl(P_WAIT," execapp.exe","","\" o_noua linie\"","222", NULL);
if (result == -1)
{
perror("Error from spawnl");
exit(1);
}
result = spawnv(P_WAIT," execapp.exe",args);
if (result == -1)
{
perror("Error from spawnv");
exit(1);
}
return 0;
}

Se salveaza intr-un fisier cu numele execprg0.c si se compileaza normal (daca a fost deschis vreun proiect se inchide acesta pe calea Project -> Close project inainte de lansarea comenzii de compilare).

Se introduc la linia de comanda urmatoarele:

execprg0 "\"din nou altceva\""

Dupa executie in fisierul appfile.txt se mai adauga urmatoarele linii:

 o_noua linie
din nou altceva

Tocmai ati lansat un program sub controlul altui program. Felicitari!

Exemplu de lista de siruri simplu inlantuita (list0.c)

/* Exemplu de lista de siruri simplu inlantuita */
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
typedef char * PString;
typedef struct TListItem * PListItem;
struct TListItem {
PString Name;
PListItem Next;
};
/**** rutina de alocare a stringurilor pe heap */
PString NewStr(PString str){
PString p=NULL;
int len=strlen(str);
if (len==0)return p;
p=(PString)malloc(len+1);
strcpy(p,str);
return p;
}

PListItem NewListItem(PString s, PListItem next){
PListItem p=NULL;int len=strlen(s);
if(len!=0) {
p=(PListItem)malloc(sizeof(TListItem)); /*aloc spatiu pentru Item */
p->Name=NewStr(s);
p->Next=next;
}
return p;
}
PListItem ItemPierdut=NULL;
void appListItem(PString s, PListItem lista){
PListItem p=lista,po;
if(lista==NULL){
printf("\nNu pot adauga la o lista vida\n");
/* este inefectiva instructiunea */
lista=NewListItem(s,NULL);
ItemPierdut=lista;
/* deoarece lista este un parametru local */
return;}
while (p!=NULL) {po=p;p=p->Next;}
po->Next=NewListItem(s,NULL);
}

void appListItem_(PString s, PListItem * lista){
PListItem p=*lista,po;
if(*lista==NULL){
printf("\nAsa pot adauga la o lista vida\n");
/* este efectiva instructiunea */
*lista=NewListItem(s,NULL);
/*deoarece modific valoarea pointerul trimis */
return;}
while (p!=NULL) {po=p;p=p->Next;}
po->Next=NewListItem(s,NULL);
}

int lenList(PListItem lista){
PListItem p=lista;int len=0;
while (p!=NULL) {p=p->Next;len++;}
return len;
}

void wrLista(PListItem lista){
PListItem p=lista;int len=0;
while (p!=NULL) {
len++;printf("Item %3d: %s\n",len,p->Name);p=p->Next;}
printf("\n");
return;
}

PListItem getListItem(int index, PListItem lista){
PListItem pr=NULL,p=lista;
int len=lenList(lista),i=0;
if(index<=len){
while(i<index) {
pr=p;p=p->Next;i++;
}
}
return pr;
}

void insertListItem(int index, PString s, PListItem *lista){
PListItem p,pn;
if(index<=1){p=*lista;
*lista=NewListItem(s,p);
return;
}
int len=lenList(*lista);
if (index>len){/*adauga la sfarsit */
appListItem_(s,lista);/* sau appListItem(s,*lista);*/
return;
}
p=getListItem(index-1,*lista);/*gasesc pointerul anterior*/

pn=NewListItem(s,p->Next);
p->Next=pn;
return;
}

void freeItem(PListItem p){
free(p->Name);
free(p);
}

void freeList(PListItem * lista){
if(*lista==NULL)return;
PListItem p,pr;
int len=lenList(*lista);
for(int i=len;i>0;i--){
int j=0;pr=*lista;
while(j<i) {
p=pr;pr=pr->Next;j++;
}
freeItem(p);
}
*lista=NULL;
}

void deleteListItem(int index, PListItem * lista){
if(*lista==NULL) return;
int len=lenList(*lista);
if(len==1) {freeItem(*lista);*lista=NULL;return;}
if((index>len) || (index<1)) return;
PListItem p,pn;
if (index==1) {
p=*lista; pn=p->Next;
freeItem(p); *lista=pn; return;
}
p=getListItem(index-1, *lista); pn=p->Next; /* pn pointeaza Itemul de sters */
p->Next=pn->Next; freeItem(pn); return;
}


main(){
PListItem Lista=NULL,pi;
printf("acum lista are %d itemuri\n",lenList(Lista));
/**** nu merge asa */
appListItem("Prima linie", Lista);
printf("acum lista are %d itemuri\n",lenList(Lista));
/**** Asa merge */
appListItem_("Prima linie", &Lista);
/*Lista=NewListItem("Prima linie",NULL);*/
printf("acum lista are %d itemuri\n",lenList(Lista));
wrLista(Lista);
appListItem("A doua linie",Lista);
printf("acum lista are %d itemuri\n",lenList(Lista));
wrLista(Lista);
appListItem("A treia linie",Lista);
printf("acum lista are %d itemuri\n",lenList(Lista));
wrLista(Lista);
printf("acum lista are %d itemuri\n",lenList(Lista));
printf("Itemul Pierdut contine sirul: \"%s\"\n",ItemPierdut->Name);
free(ItemPierdut);
int nrItem=0;
pi=getListItem(nrItem,Lista);
printf("Itemul %d este \"%s\"\n",nrItem,pi->Name);
insertListItem(2, "Inserat2", &Lista);
wrLista(Lista);
insertListItem(1, "Inserat1", &Lista);
wrLista(Lista);
insertListItem(0, "Inserat0", &Lista);
wrLista(Lista);
insertListItem(-3, "Inserat-3", &Lista);
wrLista(Lista);

int ceItem=7,rnd;randomize();
while(ceItem>0){rnd=random(ceItem)+1;
deleteListItem(rnd,&Lista);printf("Dupa delete Item %d\n",rnd);
wrLista(Lista);
ceItem--;
}

freeList(&Lista);
printf("acum lista are %d itemuri\n",lenList(Lista));
}

Acest cod produce la iesire urmatoarele

acum lista are 0 itemuri

Nu pot adauga la o lista vida
acum lista are 0 itemuri

Asa pot adauga la o lista vida
acum lista are 1 itemuri
Item 1: Prima linie

acum lista are 2 itemuri
Item 1: Prima linie
Item 2: A doua linie

acum lista are 3 itemuri
Item 1: Prima linie
Item 2: A doua linie
Item 3: A treia linie

acum lista are 3 itemuri
Itemul Pierdut contine sirul: "Prima linie"
Itemul 0 este ""
Item 1: Prima linie
Item 2: Inserat2
Item 3: A doua linie
Item 4: A treia linie

Item 1: Inserat1
Item 2: Prima linie
Item 3: Inserat2
Item 4: A doua linie
Item 5: A treia linie

Item 1: Inserat0
Item 2: Inserat1
Item 3: Prima linie
Item 4: Inserat2
Item 5: A doua linie
Item 6: A treia linie

Item 1: Inserat-3
Item 2: Inserat0
Item 3: Inserat1
Item 4: Prima linie
Item 5: Inserat2
Item 6: A doua linie
Item 7: A treia linie

Dupa delete Item 5
Item 1: Inserat-3
Item 2: Inserat0
Item 3: Inserat1
Item 4: Prima linie
Item 5: A doua linie
Item 6: A treia linie

Dupa delete Item 4
Item 1: Inserat-3
Item 2: Inserat0
Item 3: Inserat1
Item 4: A doua linie
Item 5: A treia linie

Dupa delete Item 4
Item 1: Inserat-3
Item 2: Inserat0
Item 3: Inserat1
Item 4: A treia linie

Dupa delete Item 2
Item 1: Inserat-3
Item 2: Inserat1
Item 3: A treia linie

Dupa delete Item 2
Item 1: Inserat-3
Item 2: A treia linie

Dupa delete Item 1
Item 1: A treia linie

Dupa delete Item 1

acum lista are 0 itemuri

 

Cornel Mironel Niculae, 2003-2004

16-Dec-2003