Jump to content

lusis987
 Share

Recommended Posts

Domājams, ka pēc tēmas nosaukuma ir redzams, ka es atkal ķēries pie kādas programmēšanas valodas :D Nezinu, cik laika un vēlēšanās būs, tagad pa svētku dienām, sēdēt pie pie datora un kustināt tās pelēkās šūnas... :D Bet gan jau...

 

Tātad, šobrīd apgūstu parasto C. Zinu, ka pārējie C īpaši neatšķiras un arī var uzmest aci sintaksei.

Šobrīd top programma, kas izveidotu nejaušu skaitļu masīvu + lietotājam pirmie 3 jāievada ar roku. Priekš sevis - beigās izdrukāt masīvu, lai redzētu, kas un kā.

Tad kad ar pirmo daļu būšu ticis galā, tad mēģināšu izveidot iespēju lietotājam izvēlēties, kuru masīva simbolu tad beigās vajadzētu parādīt.

Šobrīd programma salasīta izmantojot dažādus piemērus, tā ka kopējā sintakse varētu nebūt dikti pareiza - gaidu kritiku, :D protams arī ieteikumus un palīdzīgu roku. )

 


#include<stdio.h>
#include <cstdlib>
#include <ctime>
#include <iostream>

int i,j,a;
int masivs[10]; /* This declares an array */
int main()
{
 for (int j = 0;j<10;j++)
  {
    i = rand() % 101;
  masivs[j]=i;
  } 

printf("Ievadi masiva 1. skaitli\n"); 
masivs[0]=scanf("%d",&a);
printf("Ievadi masiva 2. skaitli\n");
masivs[1]=scanf("%d",&a);
printf("Ievadi masiva 3. skaitli\n");
masivs[2]=scanf("%d",&a);

// To print all the elements of the array
for (int i=0;i<10;i++)
 {
  printf("%d", masivs[i]);
 }
getch();
return 0;
}

 

ps.

 

Paldies (tiem, kas palīdzēja) par palīdzību php. Viss sanāca dikti smuki un protams arī zināšanas nostiprinājušās ;)

Link to comment
Share on other sites

Pirms izmantot rand(), vajadzētu vēl viņu inicializēt ar randomize() vai srand(), masivs[x]=scanf(...); neiet krastā, to jāsadala divās darbībās- scanf atgriež katrreiz 1, ja operācija sekmīga. Un 3 skaitļu ievadīšanu arī varētu iebāzt for ciklā.

Link to comment
Share on other sites

Ak, jā, kaut kad tiku jau bakstījis C un toreiz redzēju to randomize. Kā tas ir, ka atgriež 1, ja viss ok? Kur atgriež?

 

Šobrīd izskatās šādi, bet joprojām nokompilēt neizdodas... Kompilatora "iebildumi " redzami bildē :

http://fotohost.lv/i...lx2r973bdhb.png (a kā smuki ielikt mazu, klikšķināmu bildīti?)

 


#include<stdio.h>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <stdlib.h>			 /* prieks randomize operacijas */
int i,j,a;
int masivs[10];				 /* This declares an array */
int main()
{
for (int j = 0;j<10;j++)
{
 i = rand() % 101;
 masivs[j]=i;
}

for (int j = 0;j<4;j++)			 /* Pirmo 3 ievadisana */
{
printf("Ievadi masiva ",j,". skaitli\n");
scanf("%d",&a);
masivs[j]=&a;
 }
// To print all the elements of the array
for (int i=0;i<10;i++)
{
printf("%d", masivs[i]);
}
getch();
return 0;
}

Labots - lusis987
Link to comment
Share on other sites

Nomaini vidi uz DEV C++ vai LCC, abi bezmaksas. Pirmais ir C++, bet neiebilst pret C faila kompilēšanu, otrais ir tīrais C (bool'u nezin). Par scanf, kur atgriež? Tev taču ir uzrakstīts masivs[0]=scanf(....); vot "tur" (masivs[0]) arī atgriež (return) 1, ja iekavās scanf'am bija viss OK, (prasīts decimālais skaitlis, lietotājs tādu arī mēģina ievadīt), 0, ja lietotājs sabaksta kaut kādus burtiņus ciparu vietā.

Link to comment
Share on other sites

Es savukārt iesaku Visual C++ Express. Arī bezmaksas, bet labāku rīku neesmu redzējis.

 

Tālāk, ar to scanf jādara šitā:

scanf("%d", &a);
masivs[j] = a;

Par to "&" zīmi - to sapratīsi vēlāk, kad par pointeriem mācīsies. Tas ir diezgan sarežģīti, tāpēc tagad par to nelauzi galvu, bet vienkārši iegaumē. Var arī šitā:

scanf("%d", &masivs[j]);

 

Ja gribi pirmās trīs vērtības, tad vajag "j<3", nevis "j<4".

 

Attiecīgi arī, tā kā pirmās 3 aizpildīsi "ar roku", tad pirmais cikls var būt šāds:

for(j=3; j < 10; j++)

Bet tā ir tikai optimizācija, viss strādā pareizi arī tāpat. :)

 

Par srand() - to vajadzēs, ja negribi, lai rand() funkcija katru reizi atgriež vienus un tos pašus skaitļus. Tas ir garāks stāsts; ja vajag to izstāstīt, saki.

Link to comment
Share on other sites

Vilx, neesi apsvēris domu uzrakstīt par tamlīdzīgu tēmu grāmatu? (Programmēšanas pamati vai uz to pusi).

Savādāk lien visos šim līdzīgos topicos, tēre savu laiku, rakstot koda gabalus un katram otrajam vēl piedāvājoties uz bezmaksas tālāku "apmācību".

Liekas, ka tev sanāktu uzrakstīt gana jēdzīgu grāmatu, kuru varētu dot visiem mūsu augstskolās studējošiem programmētājiem :D

+ lv valodā ar šādu literatūru ir visai pašvaki.

 

Tas tā offtopic. Man, piemēram, šie sākumsoļu programmēšanas topici ir līdz kaklam. Ja tik vienkāršām lietām autors nav pats spējīgs izurbties cauri, tad, manuprāt, no programmēšanas ir jāturas pa gabalu.

Link to comment
Share on other sites

Esmu domājis, un gribu jau, bet nav laika. :(

 

Bet par jautājumiem - pats atceros, kādus jautājumus es uzdevu cilvēkiem, kad spēru savus pirmos soļus. :) Tikai toreiz vēl nebija interneta, un pazīstamu zinošu cilvēku nebija daudz. Taču esmu pārliecināts, ka, ja toreiz būtu bijis tāds boot.lv, kur pajautāt, tad es būtu uzdevis tieši tādus pašus jautājumus. :) Tāpēc es arī nekad neapvainojos, ka man kaut ko tādu jautā. :)

 

Plus, šeit var arī redzēt, ka cilvēks pats mēģina kaut ko darīt. Tādus es atbalstu. :) Līdz kaklam ir tie, kuri nāk ar jautājumu "Man rīt jānodod mājasdarbs, neko nesaprotu, uzrakstiet lūdzu!" :p

  • Patīk 1
Link to comment
Share on other sites

Pārgāju uz Dev C++ kompilatoru.... Labāk izprast kļūdas no paiņojumiem :)

Tev taču ir uzrakstīts masivs[0]=scanf(....)

Tad šis variants ir spējīgs ievadīt 0 vai 1, nevis to vērtību, ko lietotājs ievada?

iesaku Visual C++ Express

Valodas nesanāks mainīt, jo tas viss notiek skolā... Skolotājs piekopj principu - apgūt daudzu valodu pamatus un dzīvē, ja vajadzēs, tad apgūsi dziļāk pats.

Par to srand() varētu izstāstīt, bet saprast būtu vieglāk ar piemēru un komentiem aiz katra simbola :D No internetā atrastajiem piemēriem lāgā nesaprotu...., bet savā programmā ieliku, cerot ka darbosies kā vajag. Katrā ziņā - exe failu izveidoja :)

 

#include<stdio.h>
#include <stdlib.h> /* prieks randomize operacijas */

int i,j,a;
int masivs[10]; /* This declares an array */

int main()
{
srand(time(NULL));

for ( j = 0;j<10;j++)
{
i = rand() % 101;
masivs[j]=i;
}

for ( j = 0;j<=2;j++) /* Pirmo 3 ievadisana */
{
printf("Ievadi masiva &j skaitli\n");
scanf("%d",&a);
masivs[j]=a;
}

printf("\n");

// To print all the elements of the array
for ( i=0;i<10;i++)
{
printf("%d", masivs[i]);
printf("\n");
}

getch();
return 0;
}

 

Un kāpēc neviens nepieminēja galveno kļūdu (mainīgā deklarēšanu n-tās reizes)???

 

Paldies, Vilx-, Tev par atbalstu :) , tieši Tevi gaidīju ;)

 

Piekrītu, ka ir jāburas cauri pašam, tad arī nāk sapratne. Forums palīdz daudz ātrāk nākt pie atziņām un principu saprašanas. Bez foruma - atsēdējis pie kompja n stundas, saprastu, ka nekas nav izdarīts/saprasts un atmestu ar roku visam (uzskatu, ka lielākajai daļai tā arī ir).

 

Papildus opcijai izmantošu case operatoru - lietotājam 4os veidos jābūt iespējai pieprasīt masīva simbolu (tik, kā tas ir?)

Kas kuurā gadījumā jānorāda?

1. pēc masīva un mainīgā nosaukuma

2. pēc masīva nosaukuma un norādes uz indeksa mainīgo

3. norādot uz masīvu un indeksa mainīgā nosaukumu

4. norādot uz masīvu un norādot uz masīva mainīgo

 

Un kas šeit man ne tā pierakstīts? Neizvada j vērtību.

for ( j = 0;j<3;j++)			 /* Pirmo 3 ievadisana */
{
printf("Ievadi masiva ",j,". skaitli\n");
scanf("%d",&a);
masivs[j]=a;
 }

Labots - lusis987
Link to comment
Share on other sites

Ar printf C nav tik vienkārši kā beisikā, Tavā gadījumā jāraksta

printf("Ievadi masiva %d. skaitli: ", j);

% nozīmē, ka sekos mainīgā formatējums (d- veselā skaitļa int decimālais pieraksts) punkts aiz d jau ietilpst tekstā, pats mainīgais pieminēts aiz pēdiņām un komata. Kā vari redzēt, printf un scanf sintakse ir līdzīga, vienīgi & zīme ir vai nav vajadzīga. Pilnu aprakstu par formatēto izvadu Tev kaut kur vajadzētu apskatīties (%f ir float izvade ar decimāli, %c- drukas zīmes izvade u.t.t u.t.t.). Un protams, vienā printfā var būt vairāku mainīgo izvade, piem. printf("%d %d %d", a, b, c);

Tātad- pēdiņās ir izvadāmais teksts, kurā var ietilpt arī mainīgo izvade % zīme uz to norāda, \ savukārt norāda, ka jāizvada nevis viņš pats, bet tas, kas seko: \n nozīmē newline.

Pamēģini

printf("c:\\filename.extension\nKo redzi?\n");

Labots - učuks
Link to comment
Share on other sites

Prieks dzirdēt, ka esmu pieprasīts! :)

Valodas nesanāks mainīt, jo tas viss notiek skolā
Nesamulsti no "C++" nosaukumā. Visual C++ Express spēj kompilēt gan C, gan C++ kodu. Ja Tev failam paplašinājums būs ".c", tad tas tiks interpretēts kā C kods; ja ".cpp", tad kā C++ kods. Un C/C++ programmēšanas valoda tā ir tā pati, kas visur citur. Atšķiras tikai vide, kurā Tu to raksti.

 

Par srand() - ideja vienkārša. Mūsdienu datoriem uzģenerēt "īstus" gadījumskaitļus ir ellīgi grūti. Eksistē speciālas iekārtas, kas to spēj darīt (tur balstoties uz kaut kādām kvantu fluktuācijām), bet tās ir samērā dārgas, un parastos datoros/serveros tādas nemēdz būt. Tā vietā, datoros tiek izmantoti "pseido-gadījumskaitļi". Tie strādā tā, ka vispirms tiek dabūts kāds viens skaitlis, kas ir ne pārāk paredzams (piemēram, milisekundes kopš datora ieslēgšanas), un tad no šī skaitļa pēc formulas tiek ģenerēti nākamie skaitļi.

 

Nu, piemēram, viens tāds samērā truls (un ne pārāk kvalitatīvs) algoritms būtu šāds:

 

Sākam ar skaitli 1234.

Kāpinam to kvadrātā, iegūstam 1522756.

Atgriežam vidējos 4 ciparus kā pirmo "gadījumskaitli". Tas būtu 2275.

Kāpinam 2275 kvadrātā. Iegūstam 5175625.

Atgriežam vidējos 4 ciparus kā otro "gadījumskaitli". Tas būtu 7562.

Utt.

 

Kā redzi, ja ir zināms pirmais skaitlis, tad visus pārējos skaitļus, kas tam sekos, var viegli izrēķināt. srand() funkcija dara to, ka norāda, ar kādu skaitli sākt. Vari pamēģināt - uztasi šitādu programmu:

int i;
srand(1);
for (i = 0; i < 10; i++ )
{
   printf("%d. gadījumskaitlis: %d", i, rand());
}

Ja Tu šo programmu laidīsi vairākas reizes, tad katru reizi redzēsi vienus un tos pašus gadījumskaitļus. Ja pamainīsi skaitli, ko padod srand() funkcijai, tad redzēsi citus skaitļus - bet atkal vienus un tos pašus katru reizi.

 

 

Komanda time(NULL) atgriež sekundes kopš 1. janvāra, 1970. 00:00.

 

Padodot šo skaitli srand() funkcijai mēs nodrošinamies ar to, ka katru reizi, kad laidīsi programmu, pseido-gadījumskaitļu ģenerators tiks inicializēts ar citu sākotnējo vērtību. Tāpēc arī gadījumskaitļi katru reizi būs citi.

 

Ja srand() funkcija vispār netiek izsaukta, tad pirmais skaitlis ir 0. T.i. programmas sākumā pierakstīt srand(0) ir tas pats, kas srand() nepierakstīt vispār.

 

Kļuva skaidrāks? :)

 

(P.S. Starp citu - šito pirmo skaitli mēdz saukt par "entropiju". Ja nu kaut kur lasi, tad lai zinātu. :))

Link to comment
Share on other sites

(P.P.S. Ja gadījumā nebija acīmredzams no tā, ko es rakstīju - eksistē daudz un dažādu formulu/algoritmu, pēc kurām ģenerēt gadījumskaitļus. Piemērs, ko es uzrakstīju, ir manis paša izdomāts. C/C++ iebūvētais algoritms būs citādāks.)

 

@JDat - tas jau ir advancēts topiks citai reizei. :)

Link to comment
Share on other sites

Jācep jauns topiks? Kādreiz realizēšu metālā RND ģeneratoru uz diviem kvarciem UDB dongla izskatā. Itkā ja vajadzība nekāda, bet perfektumam: Must have in geek library. Varbūt pat izdosies linuxam iemācīt lai zina kur ir īsti RND... Tikai tā matemātiskā analīze man pieklibo, bet bija softi kas nodarbojas ar RND analīzi...

Link to comment
Share on other sites

Nu, ja gribi par gadījumskaitļiem diskutēt, tad droši vien jauns topiks. Tā ir plaša tēma. :) Šitais topiks ir par palīdzību iesācējam. :)

Link to comment
Share on other sites

Pēc atpūtas esmu atgriezies... Pr srand'u izlasīj un puslīdz kļuva skaidrāks, bet no rīta būs jāizlasa tā teikt skaidrā prāta... (nē, neesmu dzēris). Rīt lasīšu visu vēlreiz, bet šobrīd gribētu kaut kādas atbildes uz šo te:

 

Papildus opcijai izmantošu case operatoru - lietotājam 4os veidos jābūt iespējai pieprasīt masīva simbolu (tik, kā tas ir?) Kas kurā gadījumā jānorāda?

1. pēc masīva un mainīgā nosaukuma

2. pēc masīva nosaukuma un norādes uz indeksa mainīgo

3. norādot uz masīvu un indeksa mainīgā nosaukumu

4. norādot uz masīvu un norādot uz masīva mainīgo

Labots - lusis987
Link to comment
Share on other sites

Man ir aizdomas, ka "norāde" ir domāts pointeris. Diemžēl šeit es vairāk palīdzēt nevarēšu, jo pointeri Paskālā man pašam nav līdz galam pazīstami (es labi zinu, kas tie ir, un ko tie dara, bet es nezinu, kā tos pareizi Paskālā pieraksta). :(

Link to comment
Share on other sites

Wikipēdijā palasīju par pointer'iem iekš C array'iem, bet tāpat nesapratu kā pielietot. Mēģināšu izveidot vismaz pirmo/s.

Pareizi saprotu?

1. - lietotājam jāievada masīva nosaukums un elementa pozīcijas numurs

kādi vēl tur tie varianti, ko bez pointer'iem varētu?

Link to comment
Share on other sites

Vienkāršākajā gadījumā lietotājs nezin, ka ir tāds masīvs - masivs[10], ja programma prasa masīva nosaukumu, tad tā jau savā ziņā ir autorizācija. Ignorējot case- paprasi no lietotāja ievadīt masīva nosaukumu, pieņem viņu kā stringu (char masīvu), salīdzini ar etalonu, attiecīgi rīkojies tālāk

char pareizs[]="masivs";
char kogribi[16];
printf("Ievadi masiva nosaukumu: ");
scanf("%s", kogribi);
if(strcmp(kogribi, pareizs)!=0)printf("Ej bekot! Nav tada masiva\n");
else
{
 // liec ievadīt elementa Nr.
}

Link to comment
Share on other sites

Baigais Janka
palasīju par pointer'iem iekš C array'iem, bet tāpat nesapratu kā pielietot.

Nu, bet Tu jau viņus, mhm, zināmā mērā lieto :) Ja Tu definē "int masivs[10]", tad tas "masivs" arī iraid pointeris uz atmiņas zarnu no 10 integer elementiem. Tu vari iegūt masīva 3. elementu ar "masivs[2]", bet var arī ar "pointeriskāku" pierakstu "*(masivs + 2)".

Vēl tāda sīka piebilde - mainīgos bez vajadzības nevajadzētu definēt globāli. Tobiš - jādefinē funkcijas iekšienē. Tā prasti runājot - globālie sēž atmiņā visu laiku, a tie, kas funkcijā - tiem vietu izdala tikai funkcijā ejot iekšā.

Link to comment
Share on other sites

Baigais Janka

Nezinu nekādu "Tur", es vienkārši par tēmu runāju :)

Link to comment
Share on other sites

Jā, paldies, Tev par to :)

 

ps

Kad rakstīju, Tavs posts vēl nebija...

 

Papildināts

Piemērus (mazus) vari iedot šitam:

Tobiš - jādefinē funkcijas iekšienē. Tā prasti runājot - globālie sēž atmiņā visu laiku, a tie, kas funkcijā - tiem vietu izdala tikai funkcijā ejot iekšā.
Labots - lusis987
Link to comment
Share on other sites

. Diemžēl šeit es vairāk palīdzēt nevarēšu, jo pointeri Paskālā man pašam nav līdz galam pazīstami

Bļins, es esmu ideoc! Šis taču ir topiks par C, nevis Paskālu. :D Ja es vēl varētu atcerēties, ko vakar lietoju....

 

OK, tad ir īzī:

int mas[10]; // Masīvs
int x = 3; // Indekss masīvā
int *masP = mas; // Norāde uz masīvu
int *xP = &x; // Norāde uz indeksu

printf("%d", mas[x]); // Pēc masīva un indeksa
printf("%d", mas[*xP]); // Pēc masīva un indeksa norādes
printf("%d", masP[x]); // Pēc masīva norādes un indeksa
printf("%d", masP[*xP]); // Pēc masīva norādes un indeksa norādes

Link to comment
Share on other sites

Baigais Janka

Nu, vienkārši...

int a;
void main(void)
{
  int b;

  funkcija();
}

void funkcija(void)
{
  int c;
}

"a" visu laiku aizņem vietu (sēž datu apgabalā, ja nu kas), jo ir globāls. Ir arī labums - viņš ir pieejams no visām funkcijām failā, jebšu, no citiem failiem, ja vajag.

"b" tiek izdalīts stekā, OK, tā kā main() visu laiku ir aktīva, ar jau visu laiku sēž atmiņā, bet vismaz nejauc gaisu :) Pieejams tikai main() funkcijai.

"c" tiek izdalīts (arī stekā) ieejot funkcijā, un izejot tiek nahrenizēts (negribu teikt - "atbrīvots" :). Pieejams tikai funkcijai funkcija().

Link to comment
Share on other sites

Piemērus (mazus) vari iedot šitam: Baigais Janka, 20 November 2012 - 09:45 teica: Tobiš - jādefinē funkcijas iekšienē. Tā prasti runājot - globālie sēž atmiņā visu laiku, a tie, kas funkcijā - tiem vietu izdala tikai funkcijā ejot iekšā.

Škiet, autors izmanto tikai vienu funkciju (main), bet ja ir vairākas paša rakstītas funkcijas, kuras attiecīgi spēj vien otru izsaukt (kā main izsauc printf) tad tas jau ir būtiski.

int masivs[10];
int manafunkcija(int a, int b)
{
//...
}
int main()
{
//...
}

masivu nav nepieciešams nodot manaifunkcijai apstrādei (viņa saņem no izsaucošās funkcijas, kura šajā gadījumā varētu būt main 2 kaut kādus int), jo globāli definēts mainīgais pieejams visām funkcijām, bet viņš arī pastāv visu laiku, kamēr programma darbojas.

Ja masivs[10] būtu definēts main iekšpusē, viņš arī eksistētu visu laiku, kamēr darbojas programma, bet ja masīva apstrādi autors gribētu nodot kādai savai funkcijai, būtu jāparūpējas par pareizu masīva nodošanu tai (rakstot printf("%d", a); printf funkcijai netiek nodots vis mainīgais a, bet viņa kopija).

 

Autors bišķi atslēdzies, gan jau vēlāk izlasīs, ko viņam sarakstījuši.

Link to comment
Share on other sites

int x = 3; // Indekss masīvā

Šis, sanāk, ka var būt, manā gadījumā, no 0 -9? Vai tas ir domāts kaut kas cits un savādāk? Vai viņu pat nevajag norādīt, konkrētu vērtību? Jā, lasu visu vēlreiz, jo šur tur labojumi parādījušies :) Jā, par pointeriem saprotams - šortkats uz kaut ko... Tik tas pielietojums... Vilx- parādīja :) Āaa, u ko jāprasa no lietotāja katrā gadījumā? Skaitlis no 0-9?

Labots - lusis987
Link to comment
Share on other sites

Lietotājam vulgaris nav zināms, ka programmā masīva elementus skaita no nultā, tā ka vēl varētu būt, lietotājs ievada Nr 1-10,, programma attiecīgi pārrēķina (excelā arī ir 1. ne 0. rindiņa).

Link to comment
Share on other sites

Jā, no lietotāja jāprasa 0-9. Vai arī, ja gribi būt draudzīgs, tad 1-10, bet tad pašam jāatņem 1, lai dabūtu 0-9. Manā piemērā tas ir tas "x". Es vienkārši īsuma labad piešķīru viņam konstantu vērtību "3", nevis prasīju lietotājam. :)

 

Pointeris nav "šortkats". Tā ir adrese atmiņā. Baita kārtas numurs. Par pielietojumu - iekš C/C++ funkcijas var atgriezt tikai vienu vērtību. Nu, OK, varbūt var arī uztaisīt struct'u un to atgriezt, bet tā jau ir ķēpa. Tā vietā, ja Tev funkcijai vajag atgriezt vairākas vērtības, Tu vari norādīt pointerus uz atmiņu, kur šīs vērtības ielikt. Piemēram:

void Funkcija(int *a, int * b)
{
 *a = 42;
 *b = 666;
}

int main()
{
   int x, y;
   Funkcija(&x, &y);
   printf("x=%d y=%d", x, y); // Izvadīs "x=42 y=666"
   return 0;
}

 

Ir arī otrs pielietojums. Reizēm nākas rakstīt funkcijas, kuras kā parametrus saņem daudz datus (piemēram, structu ar 10 lieliem masīviem). Normāli padodot parametru, viņam tiek uztaisīta lokālā kopija funkcijā. Izmaiņas, kuras Tu ar šo parametru veic funkcijā iekšā, nav redzamas ārpus funkcijas. To jau Tu noteikti zini. Taču, ja šie dati ir ļoti lieli, tad uztaisīt kopiju ir samērā ilgstoša operācija (it sevišķi, ja šo funkciju jāsauc daudzas reizes sekundē). Tā vietā var padot pointeri uz šiem datiem. Pointeris ir tikai 4 baiti, un to padot ir daudz ātrdarbīgāk.

 

Un, vispēdīgi, ja Tev vajag darba laikā dabūt vēl atmiņu (piemēram, Tu nezini, cik elementus lietotājs ievadīs masīvā), tad šīs operācijas (malloc, new, delete) arī atgriež pointerus.

Link to comment
Share on other sites

  • 3 weeks later...

Hey, hey, hey!!!

Lai te dažs labs nepadomātu, ka darbs ir pamests un nekas nav izdarīts līdz galam (varbūt kādu pat iepriecinātu :D ), tad lūk:

#include<stdio.h>
#include <stdlib.h>			   /* prieks randomize operacijas */
int i,j,a,x,y;
int masivs[10];				   /* This declares an array */
int *masP = masivs;				  // Norāde uz masīvu
int *xP = &x;					 // Norade uz indeksu 

int main()
{

srand(time(NULL));

 for ( j = 0;j<10;j++)
  {
    i = rand() % 101;
  masivs[j]=i;
  } 

for ( j = 0;j<=2;j++)			 /* Pirmo 3 ievadisana */
  {
printf("Ievadi masiva %d. skaitli: ", j);
scanf("%d",&a);
masivs[j]=a;
  }
printf("\n");
											 // masiva izdzrukasana
for ( i=0;i<10;i++)
 {
  printf("%d", masivs[i]);
  printf("\n");
 }
printf("\n");
printf("Izvelies variantu \n");
 printf("\n");
 printf("1. Pec masiva un indeksa \n");
 printf("2. Pec masiva un indeksa norades \n");
 printf("3. Pec masiva norades un indeksa \n");
 printf("4. Pec masiva norades un indeksa norades \n");
 printf("\n");

 scanf("%d", &y);

switch ( y ) {								  // case elementa sqkums
case 1:
 printf("Kuru izvadit? Izvelies 1-10 \n");
 scanf("%d", &x);
 printf("%d", masivs[x]);						 //Pec masiva un indeksa
 break;

case 2:
 printf("Kuru izvadit? Izvelies 1-10 \n");
 scanf("%d", &x);
 printf("%d", masivs[*xP-1]);					   //Pec masiva un indeksa norades
 break;

case 3:
 printf("Kuru izvadit? Izvelies 1-10 \n");
 scanf("%d", &x);
 printf("%d", masP[x-1]);					    //Pec masiva norades un indeksa
 break;

case 4:
 printf("Kuru izvadit? Izvelies 1-10 \n");
 scanf("%d", &x);
 printf("%d", masP[*xP-1]);					   //Pec masiva norades un indeksa norades
 break;

default:
 printf("Nederiga vertiba");
 break;
}											    // case elementa beigas

getch();
return 0;
}

 

Par brīnumu programma pat darbojas :D Zinu, ka visdrīzāk ir iespējamas dažādas optimizācijas, bet bez tām šoreiz var iztikt.

Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...