» »

[C] Pomoč pri programu za fax (matrike)

[C] Pomoč pri programu za fax (matrike)

alphasaphir ::

Pozdravljeni!

Na faksu moram narediti en vsaj zame zahteven program in nikakor ne pridem nikamor, stvari, ki so se mi že dozdevale jasne nikakor ne delajo. Enostavno ne vidim rešitev.

Par problemov s programom:

1. Na izbiro dam uporabniku 4 opcije, za njih se odloči s številko od 1 do 4. Če ni izbral nobene od teh številk, bi rad da se ponavlja nagovor uporabnika, da naj vstavi 1/2/3/4 tako dolgo dokler tega ne naredi.
#include<stdio.h>
int IZB;
int main()
{
printf("Izberite med 1 ali 2 ali 3 ali 4\n"); //seveda prej piše med čem izbira
scanf("%c",&IZB);

while(IZB!=1||2||3||4){ //*** pogoja ne znam napisat, da bi deloval tudi: ((IZB!=1)||(IZB!=2)||(IZB!=3)||(IZB!=4)) ni vredu
printf("Vstavite 1 ali 2 ali 3 ali 4\n");
scanf("%d",&IZB);
}

if (IZB==1)
{...}
else if (IZB==2)
{...}
else if (IZB==3)
{...}
else if (IZB==4)
{return 0;}
}
Vse skupaj pa je še v eni do while zanki, da se ponavlja dokler se ne izbere 4 (kot izhod iz programa)
1.1.Ko stvar pride v napisano *** while zanko, ker je nekdo vnesel na primer 15 potem več nikakor ne pride iz te zanke.
1.2.Kako rešit problem če v IZB nekdo vnese character? Program kar nekaj izpisuje v nedogled.

2. Moram deklarirat matrike (5 različnih matrik, z različnimi elementi), ki jim bo potem uporanik spreminjal velikost in vnašal druge elemente.
Ampak problem je, ker kolko smo se učili se matrikam mora določit velikost pri deklaraciji, kako potem to lahko spreminjaš? (se to dela z malloc pri matrikah?)

3. Iz matrik moram narediti vektorje, od tega sem še nekoliko oddaljen, ampak se trudim razumet (to kolko razumem gre tako da moram v posebni na novo napisani funkciji s pomočjo malloc ustvarit vektor velikosti nXm in potem vodim indekse i,j matrike in k od vektorja s pomočjo treh formul posebaj iz te funkcije pa je rezultat spremenjena vhodna matrika - call by reference torej)

4. matrike moram množit če se dajo (je to lažje z vektorji ali matrikami preden se jih pretvori v vektorje (vektor je enodimenzionalna matrika, ki ima v mojem primeru indekse k, ki se jih da preračunat spet v i in j)?

Glede na to, da imam dosti vprašanj, pa me zanima, če je kdo iz Maribora, ki bi mi pomagal to osvojit kot neke vrste inštrukcije. Seveda plačam, ponudbe kar na pm prosim.
LP

alphasaphir ::

OK, prvi del sem rešil tako da sem napisal pogoj pri do while zanki, če je IZB manjša od 1 ali večja od 4 potem naj zahteva ponoven vnos. Vendar s tem pridobim problem, če kdo vnese decimalno številko, ampak upam, da to ne bo problem.

Če kdo ve za kakega vredu inštruktorja, mi lahko posreduje podatke na zs prosim. Sicer imam časa do naslednjega tedna, samo vseeno ne bi rad zavlačeval, pomoč pa nujno rabim.

Predvsem me zanima kako spreminjaš matrikam oziroma poljem velikost sredi program s funkcijo. Ugibam, da je z malloc, kjer dejansko ne rabiš povedat kako dolga je matrika, ampak samo kako velik je na primer float, s katerim jo bom napolnil. Torej moram delati z kazalci, ki so dejansko samo informacija v katerem pomnilniku se bo skrivala moj element plus info kateri je naslednji naslov. Ampak ne razumem kako naj to povežem z matrikami. Naj kar takoj naredim enodimenzionalna polja al kako?

Dajte mi prosim pomagat. Vsaj s kakšnimi koristnimi linki, do po možnosti kake slovenske literature, lahko tudi na pm.
Hvala

Zgodovina sprememb…

xyd1 ::


1.1.Ko stvar pride v napisano *** while zanko, ker je nekdo vnesel na primer 15 potem več nikakor ne pride iz te zanke.
1.2.Kako rešit problem če v IZB nekdo vnese character? Program kar nekaj izpisuje v nedogled.
LP


Let me help you

//trotl ziher
#include<iostream>
#include<string.h>
#include <windows.h>
#include <conio.h>



using namespace std;
int izbira;

int napaka()
{
    cout<<endl<<"NAPACEN VNOS!"<<endl;
    Sleep(5000);
}


int main()
{
    system("cls");
    bool uspesno=false;
    char tipka;
    cout<<"Izberi med 1,2,3,4:";
    tipka=' ';
        
    while(1)
    {
         if(kbhit())
         {
              system("cls");
              tipka=getch();
               
              if(tipka=='1')
              {
                           cout<<"izbrali ste 1";
                           uspesno=true;
                           main();
              }
              if(tipka=='2')
              {
                           cout<<"izbrali ste 2";
                           uspesno=true;
                           main();
              }
              if(tipka=='3')
              {
                           cout<<"izbrali ste 3";
                           uspesno=true;
                           main();
              }
              if(tipka=='4')
              {
                            break;break;break;break;break;
              }
              if(uspesno==false)
              {
                           napaka();
                           main();
              }
         }
    }


    
    return 0;
    cin.get(); cin.get();
}

napisano v dev c++ za microsoftov c++ ne vem če dela


2. Moram deklarirat matrike (5 različnih matrik, z različnimi elementi), ki jim bo potem uporanik spreminjal velikost in vnašal druge elemente.
Ampak problem je, ker kolko smo se učili se matrikam mora določit velikost pri deklaraciji, kako potem to lahko spreminjaš? (se to dela z malloc pri matrikah?)


mislim da se da z kazalci nisem pa 100%... zakaj pa ne deklariraš matrike vnaprej? ali pa deklariraš največjo možno varjanto (če ti tukaj ne gre za porabo RAM-a)


3. Iz matrik moram narediti vektorje, od tega sem še nekoliko oddaljen, ampak se trudim razumet (to kolko razumem gre tako da moram v posebni na novo napisani funkciji s pomočjo malloc ustvarit vektor velikosti nXm in potem vodim indekse i,j matrike in k od vektorja s pomočjo treh formul posebaj iz te funkcije pa je rezultat spremenjena vhodna matrika - call by reference torej)


Matrika je sestavljena iz vektorjev! Ne razumem vprašanja... (sleepy)


4. matrike moram množit če se dajo (je to lažje z vektorji ali matrikami preden se jih pretvori v vektorje (vektor je enodimenzionalna matrika, ki ima v mojem primeru indekse k, ki se jih da preračunat spet v i in j)?

Matrike se dajo množit. Najlažje je če imaš deklarirani dve enaki (enakih dimenzij) npr 5x5 in nato ustvariš novo matriko kamor vnašaš rezultate.


Glede na to, da imam dosti vprašanj, pa me zanima, če je kdo iz Maribora, ki bi mi pomagal to osvojit kot neke vrste inštrukcije. Seveda plačam, ponudbe kar na pm prosim.
LP


Sem iz okolice mb -ja pm me.

xyd1 ::

@#2

Da se "povečat" dimenzijo vektorju
int v[5];//vektor
//nafilaš vektor

int *kazalec = new int[5];
delete[] kazalec;//sprostimo kazalec
kazalec = new int[15]; //na novo inicializiramo z dimenzijo 15
delete[] kazalec;
//dobimo 10 prostih mest v vektorju


možno da sem se kje zmotil (0:33)

roba87 ::

1. naloga :
// Na izbiro dam uporabniku 4 opcije, za njih se odloči s številko od 1 do 4. Če ni izbral nobene od teh številk, 
// bi rad da se ponavlja nagovor uporabnika, da naj vstavi 1/2/3/4 tako dolgo dokler tega ne naredi.

#include <iostream>
using namespace std;

int main ()
{
sem:
	int izbira;
	cout << "****Izberi stevilko*****" << endl;
	cout << "1.izbira" << endl;
	cout << "2.izbira" << endl;
	cout << "3.izbira" << endl;
	cout << "4.izbira" << endl;
	cin >> izbira;

	if(izbira == 1)
	{
		cout << "pravilen vnos" << endl;
	}
	else if(izbira == 2)
	{
		cout << "pravilen vnos" << endl;
	}
	else if (izbira == 3)
	{
		cout << "pravilen vnos" << endl;
	}
	else if (izbira == 4)
	{
		cout << "pravilen vnos" << endl;
	}
	else 
	{
		cout << "napacen vnos" << endl;
		goto sem;
	}
	
	return 0;
}


	


Čeprav se uporaba goto stavka odsvetuje. Probaj še sam poiskat kakšen način. Prilagoditev programa v C pa ti vrjetno ne bo problem.

Zgodovina sprememb…

  • spremenil: roba87 ()

golobich ::

sixfiler, tak je brez goto stavka pa še manj kode je ;)

/* Na izbiro dam uporabniku 4 opcije, za njih se odloči s številko od 1 do 4. Ce ni izbral nobene od teh številk,
bi rad, da se ponavlja nagovor uporabnika, da naj vstavi 1/2/3/4 tako dolgo, dokler tega ne nardi. */
#include <iostream>
#include <windows.h>
using namespace std;

int main ()
{
    for (int i=1; i>0; i++)
    {
    int vnos;
    cout<<" Izberi stevilko " <<endl;
    cout<<"\t 1. Izbira" <<endl;
    cout<<"\t 2. Izbira" <<endl;
    cout<<"\t 3. Izbira" <<endl;
    cout<<"\t 4. Izbira" <<endl;
    cin>>vnos;
    if ( (vnos==1) || (vnos==2) || (vnos==3) || (vnos==4))
    {
         cout<<"Pravilen vnos."<<endl;
         break;
    }
    else
    {
        cout<<"Napacen vnos!"<<endl;
        Sleep (2000);
        system ("cls");
    }
    }
    system ("pause");
    return 0;
}


Lp golobich

xyd1 ::

@golobich pa vneseš "dsa asd" pa se zazanka

po domače povedano ni "trotl ziher"

edit: namesto goto lahko kličeš kar main glede na to da imaš "sem" deklariran takoj za main-om. + se zazanka pri vnosu besede oz stavka

Zgodovina sprememb…

  • spremenilo: xyd1 ()

roba87 ::

Hvala za nasvet.

Zgodovina sprememb…

  • spremenil: roba87 ()

alphasaphir ::

Res ni nikogar? Določene stvari sem sam rešil, določenih ne znam.
Prosim, da pošljete zasebno sporočilo.

edit: najlepša hvala xyd1, vendar je goto pri nas prepovedan.

Zgodovina sprememb…

roba87 ::

Pol pa naredi z neskončno zanko... Je pa čudno da vam prepovedujejo uporabo določenih stavkov... Za te osnovne programe pa res ni treba nekih prepovedi :)

alphasaphir ::

eno kratko vprašanje
če imam matriko jo v c pri deklaraciji tudi lahko inicializiram, vse v eni vrstici. na primer:
float MAT1[3][3]={{1,2,3},{4,5,6},{7,8,9}};


se da to na tako kratek način tudi z kazalci?

sixkiller: zanko sem samo po sebi rešil. vendar znotraj zanke imam if/if else in ko gre v enega izmed teh noter, mora na priemr nekaj izpisat in potem tudi prebrat nekaj iz tipkovnice, pa ne počaka, da bi prebralo, ampak kar gre dalje. trenutno je probrem z menijem tukaj.
HVALA

edit: da spremenim vprašanje, ker očitno je problem v izpisu (zakaj meni to ne dela? ker ko preberem z eno zanko vrednosti v kazalec mi s tem izpisom dela, ko pa shranim kazalec MAT tako kot spodaj pa ne več)
#include<stdio.h>
float *MAT={1,2,3,4};
int i;
int main()
{
	for(i=0;i<4;i++)
        {
	        printf("%f",MAT[i]);	        
	     } 
return 0;	
}

Zgodovina sprememb…

alphasaphir ::

Hm, sem probal editirat zgornji post, pa nekaj zafrkava; da prvo spremenim vprašanje iz prejšnjega posta, ker očitno je problem v izpisu (zakaj meni to ne dela? ker ko preberem z eno zanko vrednosti v kazalec mi s tem izpisom dela, ko pa shranim kazalec MAT tako kot spodaj pa ne več)

#include<stdio.h>
float *MAT={1,2,3,4};
int i;
int main()
{
	for(i=0;i<4;i++)
        {
	        printf("%f",MAT[i]);	        
	     } 
return 0;	
}


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[c++] meni

Oddelek: Programiranje
6502 (402) baunti
»

[C] Vsota števil v polju

Oddelek: Programiranje
51183 (1121) Cvenemir
»

Program v C

Oddelek: Programiranje
51842 (1681) darkkk
»

[C] čuden izpis iz txt dat. na zaslon

Oddelek: Programiranje
121613 (1350) l0g1t3ch
»

izbirno tekmovanje - matematika

Oddelek: Šola
121195 (1072) Neon Dei

Več podobnih tem