Hirdetés

2024. május 1., szerda

Gyorskeresés

Hozzászólások

(#1201) doc válasza Csuty12 (#1200) üzenetére


doc
nagyúr

gondolom TurboC-re gondolsz, olyan nincs hogy C++ 3.1 :)
a felsorolt problemaknak meg semmi koze sem a C programozashoz, sem a TurboC-hez, szivat a vindoze :D kerdezz ra a megfelelo topicban sztem...

(#1202) Csuty12 válasza doc (#1201) üzenetére


Csuty12
csendes tag

Köszönöm, sajnálom hogy offoltam :)

(#1203) cellpeti válasza Csuty12 (#1202) üzenetére


cellpeti
veterán

Amúgy nem fogod tudni kitenni nagy ablakba! :U

Tigris, tigris, csóvafény...

(#1204) kampi_


kampi_
csendes tag

Sziasztok!

Adott ez a kód:

STARTUPINFO StartInfo;
PROCESS_INFORMATION ProcInfo;
TOKEN_PRIVILEGES tp;
memset(&ProcInfo, 0, sizeof(ProcInfo));
memset(&StartInfo, 0 , sizeof(StartInfo));
StartInfo.cb = sizeof(StartInfo);
HANDLE handle = NULL;

if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ALL_ACCESS, &handle)) printf("\nOpenProcessError");

if (!LookupPrivilegeValue(NULL,SE_TCB_NAME,
//SE_TCB_NAME,
&tp.Privileges[0].Luid)) {
printf("\nLookupPriv error");
}

tp.PrivilegeCount = 1;
tp.Privileges[0].Attributes =
SE_PRIVILEGE_ENABLED;//SE_PRIVILEGE_ENABLED;
if (!AdjustTokenPrivileges(handle, FALSE, &tp, 0, NULL, 0)) {
printf("\nAdjustToken error");
}

i = LogonUser(user, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, &handle);
printf("\nLogonUser return : %d",i);
i = GetLastError();
printf("\nLogonUser getlast : %d",i);
if (! ImpersonateLoggedOnUser(handle) ) printf("\nImpLoggedOnUser!");

i = CreateProcessAsUser(handle, "c:\\windows\\system32\\notepad.exe",NULL, NULL, NULL, true,
CREATE_UNICODE_ENVIRONMENT |NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE, NULL, NULL,
&StartInfo, &ProcInfo);
printf("\nCreateProcessAsUser return : %d",i);
i = GetLastError();
printf("\nCreateProcessAsUser getlast : %d",i);

CloseHandle(handle);
CloseHandle(ProcInfo.hProcess);
CloseHandle(ProcInfo.hThread);

A domaint, user, és passwordot egy fájlból olvasom be. A probléma az, hogy a CreateProcessAsuser mindig 1314-es hibával száll el, ami "A required privilige is not held by the client". A kérdés mit csinálok rosszul, vagy hogyan tudnék jogot adni a handle-nek? Gondolom annak kellene.

Előre is köszi a segítséget!

kampi

(#1205) csövi


csövi
tag

helló,
TurboC- vel zúzok és van ez a jelszós feladat:

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

void main(void)
{
char jelszo1,jelszo2,jelszo3;
clrscr();
printf("\nadja meg a jelsz˘t:");
scanf("%c%c%c", &jelszo1,&jelszo2,&jelszo3);
printf("\nfordˇtott jelsz˘: %c%c%c", jelszo3,jelszo2,jelszo1);
getch();
}

hogy tudnám azt megcsinálni, hogy mikor gépelem be a jelszót ne jelenjen meg a képernyőn?

[ Szerkesztve ]

(#1206) Orb1337 válasza csövi (#1205) üzenetére


Orb1337
tag

Ne scanf-et használj adatbeolvasásra,hanem getch()-t

#include<stdio.h>
#include<conio.h>
#include<math.h>
void main (void)
{
char betu1,betu2,betu3;
clrscr();
printf("K‚rem a jelsz˘t:");
betu1=getch(); //beolvasás
betu2=getch();
betu3=getch();
printf("\n a jelsz˘ fordˇtva:%c%c%c",betu3,betu2,betu1);
getch();
}

(#1207) ludcsa01


ludcsa01
csendes tag

Sziasztok!

Egy gondolom számotokra nagyon egyszerű programba kérném a segítségeteket, mert én még csak most tanulom.És ezt adták fel házinak 1 óra programozás után.
Előre is köszi a segítséget.

Írj olyan programot, mely bekéri a felhasználó születési évét, majd a képernyőre írja, hogy hány év van közted és a felhasználó közt, valamint a neved.
Példa:
Mikor születtél?
1986
Én 1985-ben. 1 év van köztünk.
A nevem Bond.

A fenti példában feltételeztem, hogy 1986-ban születtem és a nevem Bond, de Te a saját adataiddal helyettesítsd ezt. Figyelj oda, hogy nem tudod, hogy a felhasználó idősebb, vagy fiatalabb, mint Te.

(#1208) Orb1337 válasza ludcsa01 (#1207) üzenetére


Orb1337
tag

Bond nevű felhasználó adatai fixek?

Beviszed az adatokat, majd if feltételekkel vizsgálod hogy idősebb, fiatalabb vagy egykorú-e, és ezek alapján ki tudod számolni, hogy hány év a különbség.

(#1209) ludcsa01 válasza Orb1337 (#1208) üzenetére


ludcsa01
csendes tag

Nem adottak.
Azokat én adom meg vagyis csak az én születési évem a fix.
Nem tudnál nekem írni egy példát rá, hogy mégis hogy nézne ez ki.
Mert még ezt az if-es részt nem használtuk.
Meköszönném.

(#1210) csövi válasza ludcsa01 (#1207) üzenetére


csövi
tag

még én is csak 2órán voltam, de valahogy így csinálnám:

#include <stdio.h>
#include <conio.h>
#include <math.h>

void main(void)
{
int szulev;

clrscr();

printf("\nMikor születtél? ");
scanf("%d",&szulev);

printf("\nÉn 1985-ben. ");
printf("%d",abs(szulev-1985));
printf("év van köztünk.\nA nevem Bond.");

getch();
}

(#1211) Orb1337 válasza csövi (#1210) üzenetére


Orb1337
tag

Ezzel a megoldással 2 probléma van, nem vizsgálsz olyan eseteket amikor Bond fiatalabb vagy egyidős vele, 0 és negatív értékeket is kaphatsz.
Nem emlékszek a C szintaktikára, de

#include <stdio.h>
#include <conio.h>
#include <math.h>

void main(void)
{
int szulev,bondszulev;
clrscr();
printf("\nMikor születtél? ");
scanf("%d",&szulev);
printf("\nMikor születtél Bond? ");
scanf("%d",&bondszulev);

if (szulev>bondszulev)
{
printf("\nÉn bondszulev-ben. ");
printf("%d",abs(szulev-1985));
printf("év van köztünk.\nA nevem Bond.");
}
if (szulev=bondszulev)
{
printf("\nÉn bondszulev-ben. ");
printf("Egyidősek vagyunk! \nA nevem Bond.");
}
if (szulev<bondszulev)
{
printf("\nÉn bondszulev-ben. ");
printf("%d",abs(bondszulev-szulev));
printf("év van köztünk.\nA nevem Bond.");
}
getch();

[ Szerkesztve ]

(#1212) Jester01 válasza Orb1337 (#1211) üzenetére


Jester01
veterán

A 0 az jogos, de az abs elintézi ugye a negatív számokat.
MOD: a te megoldásod meg sajnos még annyira sem működik mint az eredeti.

[ Szerkesztve ]

Jester

(#1213) Orb1337 válasza Jester01 (#1212) üzenetére


Orb1337
tag

Mondtam, hogy C parancsokra és szintaktikára nemigazán emlékszem, az egészet mint problémamegoldási ötlet vetettem fel :)

(#1214) !wannabe


!wannabe
tag

Sziasztok Mesterek!

Van egy kódom alant, amiben neveket tároltam el láncolt listával. Van hozzá egy delete nevű fgv is, ami azt szeretné megcsinálni, hogy vár egy int számot és azt az elemet amit megadunk a szám által, törli a listából. A main-ben, hogy kellene hivatkozni a delete fgv-nek erre a számra?

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

struct cn
{

char *name;
struct cn *next;
};

struct cn *head = NULL;

void insert(char *c)
{
struct cn *new;

new = (struct cn*)malloc(sizeof(struct cn));
new->name=c;
new->next=head;
head=new;
}
void printout()
{
struct cn *current;

current = head;
while(current)
{
printf("%s", current->name);
current= current->next;
}
}
void delete(int del)
{
struct cn *current, *previous;
previous = 0;

current = head;
while(current)
{
if(current->name == del)
{
struct cn *temp = current;
if(previous)
{
previous->next=current->next;
}
else
{
head = current->next;
}
current=current->next;
free(temp);
}
else
{
previous=current;
current=current->next;
}

}

}

int main()
{

insert("Eszter\n");
insert("Bea\n");
insert("Nóra\n");
insert("Béla\n");
insert("Peti\n");
printout();
return 0;
}

Érthető a kérdésem?

(#1215) Jester01 válasza !wannabe (#1214) üzenetére


Jester01
veterán

Érthető a kérdésem?

Nem :N
A listádban nevek vannak, tehát az if(current->name == del) értelmetlen.
Vagy név szerint akarsz törölni, vagy index szerint. Ha név szerint akkor nyilván nem egy int paramétert kell átadni, ha meg index szerint akkor nem a name mezővel kell összehasonlítani.

Jester

(#1216) jattila40 válasza !wannabe (#1214) üzenetére


jattila40
tag

Nem szerencsés a cn struktúrában csak a névre mutató pointert használni, el kellen tárolni benne magát a nevet. A példádban jól fog működni, mivel az insert argumentumában megadott nevek sztring konstansok, amiknek a fordító fix címet adott. De mi van akkor, ha pl. egy függvényből hívod az insert függvényt, aminek a hívó egy lokális változóját adod át név paraméterként (pl. billenttűzetről bekért input). Ha a hívó fv.-ből kilépsz, érvénytelen címre fognak mutogatni a cn struktúrád name mezői. Szerintem a name pl. char name[50] kell hogy legyen, és a name mezőbe strcpy-nal másold az insert fv. c paramétere által mutatott sztringet. Persze figyelj, nehogy túlírd a name tömböt. Most a cn struktúrád mérete 8 byte, mivel 2 pointert tartalmaz. A javasolt módosítás után 54 byte lesz.

(#1217) mrbig25


mrbig25
őstag

Üdv Mindenkinek!

Lenne egy apró, ám annál idegesítőbb problémám...
Van egy egydimenziós tömböm, amiben számok vannak, és egy szám többször is előfordulhat.
Ebből kéne kiválogatni, hogy milyen számok vannak és hogy hányszor fordulnak elő. (eloszlás-függvény lényegében)
Pld. a tömb elemei: [4 , 6 , 4 , 5, 4 , 5 , 9 , 12 , 9] és ebből kéne ezt csinálni -->> 3db 4-es, 2db 5-ös, 1db 6-os, 2db 9-es, 1db 12-es...

választ előre is köszönöm :R

...

(#1218) Gyuri16 válasza mrbig25 (#1217) üzenetére


Gyuri16
senior tag

tobb egyszeru megoldas is van erre, kellene ismerni a konkret korulmenyeket.

ha tudod hogy nem tul sok fajta szam lesz (mondjuk max 100) viszont ezekbol sok (ertsd: a legtobb szam tobbszor is lesz), akkor csinalsz egy akkora tombot, kinullazod. aztan veszed a szamaid sorban, es a tombben azon az indexen levo erteket egyel noveled. igy a vegen megkapod a 100as tombben, hogy melyik szambol mennyi volt.

ha nagy intervallumbol lehetnek a szamok, ill tul nagy pazarlas lenne a tomb (nagy ugrasok vannak a szamok kozott), akkor lancolt listaval lehet probalkozni (a lista minden eleme tartalmazza a szamot, es a gyakorisagat + pointert a kovetkezo elemre). nagyvonalakban:
x=kovetkezo szam a tombbol
atfutod a lancolt listat, van e mar ott x ertek
-ha igen, akkor noveled ott a gyakorisagot
-ha nem, akkor a megfelelo helyre beszurod (akar rakhatod a vegere is, de ha sorbarendezve lesz, akkor valamivel gyorsabb lesz), es a gyakorisagot beallitod 1-re
kezded elolrol, amig van szam

az elso algoritmus linearis idoben fut, viszont a felhasznalt memoria fugg a legnagyobb vart szamtol.
a masik algoritmus kvadratikus idoben fut, es a memoria linearisan fugg a kulonbozo ertekek szamatol

Nem vagyok egoista, csak uborkagyalu!

(#1219) mrbig25 válasza Gyuri16 (#1218) üzenetére


mrbig25
őstag

köszi szépen :R

az első ötlet alapján sikerült összehozni. tudtam, hogy valami egyszerű dolog lesz, de az ilyenek sose ugranak be :W

[ Szerkesztve ]

...

(#1220) Zollee


Zollee
tag

Hy!

Most kezdtem a programozást és már elakadtam az elején. :B
A void függvénnyel próbálkozom. Függvénnyel (void) kell megvalósitani a henger felszinének kiszámitását. Valamiért nem jó.. :(

#include<stdio.h>
#define PI 3.14159265

void A(float r, float h)
{
float felsz;
felsz=2*PI*r*(r+h);
}

int main()
{
float sugar, magassag, felszin;

printf("Add meg a henger alapkörének sugarát: \n");
scanf("%f", &sugar);
printf("Add meg a henger magasságát: \n");
scanf("%f", &magassag);
felszin=A(sugar, magassag);
printf("A henger felszine: %f \n", felszin);
}

21. sor: void value not ignored as it ought to be
Mi lehet a baj :F

A legügyesebb állat az ürge, hiszen búzával teli pofazacskóval is képes repülni, miközben egy baglyot egyensúlyoz a hátán.

(#1221) Lortech válasza Zollee (#1220) üzenetére


Lortech
addikt

Kiemeled hogy void függvény, pedig a void mint típus, ill. típus "hiánya" éppen procedúrát jelent, nem függvényt, nincs visszatérési értéke, ezért a "felszin=A..."
értékadó kifejezés nyilvánvalóan hibás. A függvénynek egy megfelelő (2*PI*r*(r+h) -vel kompatibilis) adattípust kell megadnod visszatérési érték típusának void helyett.
(szerk: és persze vissza is kell térned a függvényből a visszatérési értékkel a return kulcsszóval)

[ Szerkesztve ]

Thank you to god for making me an atheist

(#1222) Zollee válasza Lortech (#1221) üzenetére


Zollee
tag

Igen, a return-t alkalmaztam egy másik feladatomnál is, csak itt a felszin mellett a térfogatot is ki kell majd számolni és azt mondták, hogy a void-ot használjam a feladat megoldására. A return csak 1 értéket ad vissza, igy egyszerre a 2 külön képletre nem jó. Azért irtam le csak az egyiket a c kódba, mert egyszerre csak 1 problémára akartam koncentrálni, ha megy jöhet a másik is.
Vagy akkor mégsem void a megoldás kulcsa?

A legügyesebb állat az ürge, hiszen búzával teli pofazacskóval is képes repülni, miközben egy baglyot egyensúlyoz a hátán.

(#1223) Lortech válasza Zollee (#1222) üzenetére


Lortech
addikt

Szerintem érdemes két külön függvényt írni a két számításra, ezzel elkerülve a problémát.
A return valóban egy értéket ad vissza, de ez az érték lehet akár egy memória cím is, ami egy tömbre, listára, struktúrára stb. mutat, ami bármennyi értéket takarhat.
Voiddal is megoldható - ha konkrétan ez volt a feladat -, de akkor átmenő paramétert vagy globális változót kell alkalmaznod (ezt csak a lehetőség miatt említettem, ne így csináld). Ez pl. úgy néz ki, hogy egy mutatót adsz át paraméterként, és az általa mutatott értéket megváltoztatod a kivánt értékre az eljárás végrehajtása során, majd az értéket felhasználod.

pl.
"r változó mint mutató deklarálása, inicializálása";
függvényhívás(r (címe),...,...);
eredmeny = r (értéke);

Kódot szándékosan nem írok, mert ebben a stádiumban szerintem jobb, ha te magad fedezed fel ezeket a fogalmakat.

[ Szerkesztve ]

Thank you to god for making me an atheist

(#1224) Zollee válasza Lortech (#1223) üzenetére


Zollee
tag

Igen, én magam akarok vele küzdeni, mert később is magamtól kell irnom programokat. Értem amit irtál, a mutatókat még nem vettük, kerekedne az oktató szeme ha olyat adnék be.. :D
Köszi :)

A legügyesebb állat az ürge, hiszen búzával teli pofazacskóval is képes repülni, miközben egy baglyot egyensúlyoz a hátán.

(#1225) Gergőőőőőőőő


Gergőőőőőőőő
csendes tag

Hali egy nagy segítséget kérnék c++-beni feladatomhoz.

A feladat a köv.:Egy olyan programot kellene írnom ami string vagy osztályból áll.
És a nevemből pl:Szabó Gergely névből készítsen szavakat és egyessével adja ki és kérdezze meg hogy értelmes-e ha értelmes akkor tárolja el egy txt fájlba .

előre is köszönöm a segítségeteket :))

(#1226) Jester01 válasza Gergőőőőőőőő (#1225) üzenetére


Jester01
veterán

És melyik részéhez kellene a segítség? Mi tudtál megcsinálni és mit nem?

Nagy vonalakban pl. a string osztály find, find_first_of, find_first_not_of metódusaival megcsinálod a darabolást, simán cin/cout a kérdéshez, és egy ofstream a fájl íráshoz.

Jester

(#1227) Gergőőőőőőőő


Gergőőőőőőőő
csendes tag

hét nagyvonalakban egyiket sem mivel a tanár aki feadta ez nekünk az kb.10 percet magyarázott mi a string és csináljátok szóval ezért is írtam ide mert elég tanácstalan vagyok

(#1228) Lakers


Lakers
tag

Sziasztok!

Tudtok ajánlani olyan helyet, ahol grafikai feladatok megvalósítása van C nyelven? Egyszerűre gondolok, mint sokszögek rajzolása, egérrel való mozgatása, háttérszínezése. (Google barátom által talált oldalak példakódjai sokszor vírust is rejt...)

(#1229) Gergőőőőőőőő


Gergőőőőőőőő
csendes tag

Pl betűket véletlenszerűen generálni

(#1230) cellpeti


cellpeti
veterán

üdv!

van nekem egy olyan feladatom,hogy be kell kérnem egy karakterláncot.

A karakterláncban lévő kisbetűket,ha van benne,akkor naggyá kell konvertálni,ami nagy azt meg békén hagyni.

Nekem lenne erre egy elképzelésem.

for-val végig mennék a tömb elemein. Ha kisbetű akkor nagyá, különben meg békén hagyom. :U

Tigris, tigris, csóvafény...

(#1231) Gyuri16 válasza cellpeti (#1230) üzenetére


Gyuri16
senior tag

kerdest nem latok, de azert leirom: ugy jo ahogy mondod. egyik modszer, hogy nezed a szamerteket (tudod hogy az ascii tablaban a betuk egymas utan vannak, igy aztan eleg kivonnod a kisbetuk kodjabol valamennyit, es megkapod a nagybetut)
az egyszerubb megoldas a toupper, isupper fv, peldaprogram: [link]

Nem vagyok egoista, csak uborkagyalu!

(#1232) cellpeti válasza Gyuri16 (#1231) üzenetére


cellpeti
veterán

Köszönöm a linket! :R :R

Tigris, tigris, csóvafény...

(#1233) Dirty_Pio


Dirty_Pio
csendes tag

Sziasztok, akarok irni egy nagyjabol katalogizalo programot ami eloszor megnyit egy data.txt fielot amiben el vannak mentve a katalogus elemei es a kodjai. A felhasznalo ezutan beirja a kodjat a kivant reszlegnek ami utan a program megnyitja a filet amibe az elemek vannak, es ki is iratja a kepernyore. Ezutan rakerdez hogy akarok-e hozzaadni uj elemet vagy meglevot kitorolni.Minden reszleg, azaz file elso soraba el van mentve hogy hany elem van benne. A problemam az lenne hogy amikor ki akarok torolni egy elemet akkor azt ugy oldalam meg hogy szepen az alatta levo sortol kezdodoen mindent ramasolnak es az utolso sort pedig elhagynam. Itt a kod

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

struct tm * timeinfo;

int rm(FILE *f)
{
fseek(f,0,0);
char buff[255];
int max,linelen,n;
fgets(buff,100,f);
max=atoi(buff);
printf("type the nr of the product");
scanf("%i",&n);
printf("the number %i, and max %i",n,max);
while (n>0)
{
fgets(buff,250,f);
n--;
}
fgets(buff,250,f);
while (fgets(buff,250,f))
{
linelen=strlen(buff);
fseek(f,-linelen,1);
fprintf(f,"%s",buff);
};
return 0;
}

int add(FILE *f)
{
char name[20],price[15],buff[101]="",*s;
int linelen,max;
fseek(f,0,0);
fgets(buff,19,f);
max=atoi(buff);
max++;
// printf("max=%i",max);
fseek(f,0,0);
fprintf(f,"%i\n",max);
fseek(f,0,2);
time_t rawtime;
time(&rawtime);
timeinfo=localtime(&rawtime);
s=asctime(timeinfo);
s[strlen(s)-1]='\0';
fprintf ( f,"\n %i %s ",max,s);
fseek(f,1,1);
gets(buff);
printf("product name:");
scanf("%s",name);
fprintf(f," %s ",name);
printf("product prince:");
gets(buff);
scanf("%s",price);
fprintf(f," %s",price);
return 0;
}

int list(FILE *f)
{
fseek(f,0,0);
char c;
fgetc(f);
while( (c=fgetc(f))!=EOF)
{
putchar(c);
}
printf("\n");
return 0;
}

int main(void)
{
FILE *f,*g;
if (!(g=fopen("data.txt","r"))) {
printf("missing data file");
exit (1);
}
char s[3],c;
int a=1;
list(g);
fclose (g);
while (a)
{
printf("\nchoose the code of the product type\n");
scanf("%s",s);
if (strlen(s)==2)
switch (s[strlen(s)-1])
{
case '1' :
if (!(f=fopen("a1.txt","r+")))
{
printf("missing data file");
exit (1);
}
a=!a;
break;
case '2' :
if (!(f=fopen("a2.txt","r+")))
{
printf("missing data file");
exit (1);
}
a=!a;
break;
case '3' :
if (!(f=fopen("a3.txt","r+")))
{
printf("missing data file");
exit (1);
}
a=!a;
break;
case '4' :
if (!(f=fopen("a4.txt","r+")))
{
printf("missing data file");
exit (1);
}
a=!a;
break;
case '5' :
if (!(f=fopen("a5.txt","r+")))
{
printf("missing data file");
exit (1);
}
a=!a;
break;
case '6' :
if (!(f=fopen("a6.txt","r+")))
{
printf("missing data file");
exit (1);
}
a=!a;
break;
case '7' :
if (!(f=fopen("a7.txt","r+")))
{
printf("missing data file");
exit (1);
}
a=!a;
break;
default :
printf("wrong code\n");
}
}
list(f);
a=1;
while (a)
{
printf("press 1 to add an element, 2 to remove one and 0 to exit");
scanf("%i",&a);
switch(a)
{
case 1:
add(f);
break;
case 2:
rm(f);
break;
default :break;
}
}
fclose (f);
return 0;
}

Az rm fuggveny oldana meg a torlest, de ehelyett vegtelen ciklusba kot ki es egyre csak noveli a file meretet. Egy peldat is mellekelek:

file data.txt:
code name
a1 = PC/notebook/server
a2 = cash register/balance
a3 = software
a4 = Husqvarna
a5 = audio systems
a6 = home/car security
a7 = PC/camera accesorries

file a3.txt
4
nr. __date__ __product_name__ ___price___
1 Mon Oct 05 17:13:14 2009 elem1 1234
2 Mon Oct 05 17:13:22 2009 elem2 3214
3 Mon Oct 05 17:13:28 2009 elem3 2114
4 Mon Oct 05 17:13:33 2009 elem4 2145

Es ha tudtok jol fogna egy modszer amivel szepen kozepre tudom amjd igazitani a fielba, mert eddig nekem csak az jutott az eszembe hogy mindig fix szamu karakter keruljon minden nev ala. ELore is kosz.

(#1234) m0h0senator


m0h0senator
őstag

Sziasztok!

Olyan programot kéne írnom amibe bekérünk 2 számot. Ezt a 2 számot felbontja prímtényezős alakra majd kiszámolja a legkisebb közös többszöröst és a legnagyobb közös osztót. Nektek milyen ötletetek van?

Előre is köszi

An odyssey through the realm of consciousness.

(#1235) Jester01 válasza m0h0senator (#1234) üzenetére


Jester01
veterán

Melyik részére kell ötlet? Prímtényezőkre bontáshoz a legfavágóbb módszer ha szépen ciklusban megpróbálod leosztogatni. A végeredmény pedig a tényezőkből már adódik.

Jester

(#1236) Jester01 válasza Dirty_Pio (#1233) üzenetére


Jester01
veterán

Nekem speciel nem kerül végtelen ciklusba csak nem csinál semmit:

while (fgets(buff,250,f))
{
linelen=strlen(buff);
fseek(f,-linelen,1);
fprintf(f,"%s",buff);
};

Ugyanis a fenti ciklus szépen beolvas egy sort, majd visszmegy ugyanannak a sornak az elejére és újra kiírja. Vagyis nem csinál semmit csak minden sort rámásol saját magára.

Jester

(#1237) m0h0senator válasza Jester01 (#1235) üzenetére


m0h0senator
őstag

A prímtényzős rész megvan. Nekem az kellene ahol meghatározza a legkisebb közös többszöröst és a legnagyobb közös osztót a prímtényezőkből.

Pl: 8 l 2 12 l 2
4 l 2 6 l 2
2 l 2 3 l 3
1 1

majd ezeknek az lnko: 2 a négyzeten és ezt h számolja ki. :R

An odyssey through the realm of consciousness.

(#1238) Jester01 válasza m0h0senator (#1237) üzenetére


Jester01
veterán

A legnagyobb közös osztóhoz a közös prímtényezőket kell venni a legmagasabb közös hatványon. A többszöröshöz meg prímtényezők úniója kell. Legalábbis én így emlékszem.

Jester

(#1239) m0h0senator válasza Jester01 (#1238) üzenetére


m0h0senator
őstag

A definíciók megvannak, csak ez a c beli megvalósítását nem tudom. :B :R

An odyssey through the realm of consciousness.

(#1240) jattila40 válasza Jester01 (#1238) üzenetére


jattila40
tag

A legnagyobb közös osztó: közös prímtényezők az alacsonyabb hatványon összeszorzova
legkisebb közös többszörös: közös prímtényezők magasabb hatványon, és a nem közösek összeszorozva.

(#1241) jattila40 válasza Zollee (#1224) üzenetére


jattila40
tag

A fügvénynek csak egy visszatérő értéke lehet, és az sem akármilyen típusú. Ha felszín és térfogat is kell, akkor írhatsz egy void fv.-t (eljárást), aminek 4 paramétere lesz, valahogy így:

#include <stdio.h>
#define PI 3.141592654

void felszin_terfogat(float sugar, float magassag,float *felszin, float *terfogat)
{
if(felszin==NULL || terfogat==NULL)return;
*felszin=2*sugar*PI*(sugar+magassag);
*terfogat=sugar*sugar*PI*magassag;
}

void main(int argc, char*argv[])
{
float sugar,magassag,felszin,terfogat;

if(argc<3){
printf( "henger felszinet es terfogatat szamolja ki a program\r\n\
parancssori argumentumokkal is hivhato: <programnev> <sugar> <magassag>\r\n");
printf("sugar: ");
scanf("%f",&sugar);
printf("magassag: ");
scanf("%f",&magassag);
}
else{
sugar=atof(argv[1]);
magassag=atof(argv[2]);
}

felszin_terfogat(sugar,magassag,&felszin,&magassag);
printf("felszin: %10.5f\r\n",felszin);
printf("terfogat: %10.5f\r\n",terfogat);
}

[ Szerkesztve ]

(#1242) doc válasza jattila40 (#1241) üzenetére


doc
nagyúr

vagy a return value egy struct lesz, szelesseggel es magassaggal (ez inkabb c++ os logika :) )

(#1243) jattila40 válasza doc (#1242) üzenetére


jattila40
tag

Egy példát estleg? Milyen struktúrát adnál vissza, hol lenne az deklarálva?

(#1244) PuMbA


PuMbA
titán

Hali!
Feltettem a NetBeans 6.7.1-et,MinGW-t és MSYS-t. Beadtam neki az elérési utakat erre ilyen hülyeségeket ír ki:

"/d/Dokumentumok/Egyetem/Programok/Numat/Cholesky/"C:/Program Files/MinGW/MSYS/bin/make.exe" -f nbproject/Makefile-Debug.mk SUBPROJECTS= .build-conf
/bin/sh: /d/Dokumentumok/Egyetem/Programok/Numat/Cholesky/C:/Program Files/MinGW/MSYS/bin/make.exe: No such file or directory
make.exe": *** [.build-impl] Error 127
BUILD FAILED (exit value 2, total time: 500ms)"

Mi lehet a baja?

[ Szerkesztve ]

(#1245) Jester01 válasza PuMbA (#1244) üzenetére


Jester01
veterán

Szerintem az, hogy nem ismeri fel a C:/ kezdetű útvonalat abszolútnak ezért összefűzi az aktuális directoryval. Próbáld meg /c/ alakban.

Jester

(#1246) PuMbA válasza Jester01 (#1245) üzenetére


PuMbA
titán

Hol írjam át? Ha a MinGW elérési útaknál írom akkor reklamál,hogy nem jó az elérési út.

[ Szerkesztve ]

(#1247) Jester01 válasza PuMbA (#1246) üzenetére


Jester01
veterán

Ugye az msys parancssorból futtatod? Annak meg kell ennie a /c/ stílusú útvonalakat.

Jester

(#1248) PuMbA válasza Jester01 (#1247) üzenetére


PuMbA
titán

Nem,NetBeansből. Akkor NetBeansből nem lehet? Nekem ott kellene...
MSYS parancssort hogy kell használni?

[ Szerkesztve ]

(#1249) VaZso


VaZso
senior tag

Sziasztok!

Eddig nem programoztam C-ben. Van néhány rutin, amit meg kellene írnom, de kicsit elakadtam, ahogy sorjában haladtam velük... A kérdésem amatőrsége ebből fakadóan adott...

Maga a rutin nem tűnik bonyolultnak - egy kapott string első character-ét kell kapitalizálni.
A string, ill. visszatérési érték pointeren kersztül kerül átadásra.

Amin elakadtam: a pointer aktuális helyzetén lévő adatot hogy tudom megváltoztatni?
pl. adott egy char *ptr nevű pointer, ami az "alma" szóra mutat.
Szeretném kicserélni mondjuk az m betűt n-re. A pointer az m fölé mutat. Hogy adom meg neki az n értéket úgy, hogy a többi characterhez nem nyúlok?

Rosszul állok a feladathoz?

(#1250) Jester01 válasza VaZso (#1249) üzenetére


Jester01
veterán

Ugye a pointer mindig egy betűre mutat, tehát ha a stringed módosítható, akkor simán piszkálhatod betűnként (*ptr = 'n' vagy a tömb-pointer konverziót használva). Vigyázat, a string konstansok (literálok) nem módosíthatók!

Jester

Copyright © 2000-2024 PROHARDVER Informatikai Kft.