C/C++

  • Креатор на темата Креатор на темата Драган
  • Време на започнување Време на започнување
Ај кажи ја целата задача па ќе видиш пример со код.

Инаку во моето мислење по грешка пишав функција споредуваш. Мислев споредувач. Како и да е, кажи ја задачата.


Задачата е да се внесат Име, Презиме и Номер на ученик (во вид на структура) и со внесувањето се создава датотека. Откако ќе се внесат податоците за сите ученици (30 треба да се):

Датотеката да се сортира по Име, Презиме и Номер, при што се создава друга датотека sort.dat

толку :)
 
Задачата е да се внесат Име, Презиме и Номер на ученик (во вид на структура) и со внесувањето се создава датотека. Откако ќе се внесат податоците за сите ученици (30 треба да се):

Датотеката да се сортира по Име, Презиме и Номер, при што се создава друга датотека sort.dat

толку :)

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

Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define golemina 3
struct Zapis
{
	char Ime[20];
	char Prezime[20];
	int nomer;
};

int sporediZapisi(struct Zapis * a, struct Zapis * b)
{
	int ret = 0;
	if (a!=NULL && b!=NULL)
	{
		ret = strcmp(a->Ime, b->Ime);
		if (ret == 0)
		{
			ret = strcmp(a->Prezime, b->Prezime);
			if (ret == 0)
			{
				if (a->nomer < b->nomer)
					ret = -1;
				else if (a->nomer > b->nomer)
					ret = 1;
				else
					ret = 0;
			}
		}
	}
	return ret;
}

void podrediZapisi(struct Zapis ** pZapisi, int len)
{
	//
	int i,j, najmalIndex;
	struct Zapis * pTmp;
	for (i=0;i<len-1; i++)
	{
		najmalIndex = i;
		for (j=i+1; j<len; j++)
		{
			if (sporediZapisi(pZapisi[j], pZapisi[i]) < 0) // eve ja taa sporedbata. 
				najmalIndex = j;
		}
		if (najmalIndex != i)
		{
			//zameni
			pTmp = pZapisi[i]; pZapisi[i] = pZapisi[najmalIndex]; pZapisi[najmalIndex] = pTmp;
		}
	}
}

int main()
{
	int i;
	
	//ova ni treba. tuka gi smestuvame pointerite kon zapisi za lesno sortiranje
	struct Zapis * pZapisi[golemina];

	//alocirame eden po eden, 3 zapisi
	for (i = 0; i<golemina; i++)
		pZapisi[i] = (struct Zapis *)malloc(sizeof(struct Zapis));
	
	//citame od standarden vlez/ zmeni go po potreba
	for ( i = 0; i<golemina; i++)
	{
		scanf("%s %s %d", pZapisi[i]->Ime, pZapisi[i]->Prezime, &pZapisi[i]->nomer);
	}
	printf("%s", "-----------------------------------------\n");
	podrediZapisi(pZapisi, golemina);

	//pecatime
	for ( i = 0; i<golemina; i++)
		printf("%s %s %d\n", pZapisi[i]->Ime, pZapisi[i]->Prezime, pZapisi[i]->nomer);

	system("PAUSE");
	return 0;
}

Еве тест. влезот е пред цртата, а излезот после.
Код:
Boris Petreski 4
Antonio Dimoski 2
Goran  Gjorevski 5
--------------------
Antonio Dimoski 2
Boris Petreski 4
Goran Gjorevski 5
 
Еве пример код, разгледај го, смени тоа што треба.

Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define golemina 3
struct Zapis
{
    char Ime[20];
    char Prezime[20];
    int nomer;
};

int sporediZapisi(struct Zapis * a, struct Zapis * b)
{
    int ret = 0;
    if (a!=NULL && b!=NULL)
    {
        ret = strcmp(a->Ime, b->Ime);
        if (ret == 0)
        {
            ret = strcmp(a->Prezime, b->Prezime);
            if (ret == 0)
            {
                if (a->nomer < b->nomer)
                    ret = -1;
                else if (a->nomer > b->nomer)
                    ret = 1;
                else
                    ret = 0;
            }
        }
    }
    return ret;
}

void podrediZapisi(struct Zapis ** pZapisi, int len)
{
    //
    int i,j, najmalIndex;
    struct Zapis * pTmp;
    for (i=0;i<len-1; i++)
    {
        najmalIndex = i;
        for (j=i+1; j<len; j++)
        {
            if (sporediZapisi(pZapisi[j], pZapisi[i]) < 0) // eve ja taa sporedbata. 
                najmalIndex = j;
        }
        if (najmalIndex != i)
        {
            //zameni
            pTmp = pZapisi[i]; pZapisi[i] = pZapisi[najmalIndex]; pZapisi[najmalIndex] = pTmp;
        }
    }
}

int main()
{
    int i;
    
    //ova ni treba. tuka gi smestuvame pointerite kon zapisi za lesno sortiranje
    struct Zapis * pZapisi[golemina];

    //alocirame eden po eden, 3 zapisi
    for (i = 0; i<golemina; i++)
        pZapisi[i] = (struct Zapis *)malloc(sizeof(struct Zapis));
    
    //citame od standarden vlez/ zmeni go po potreba
    for ( i = 0; i<golemina; i++)
    {
        scanf("%s %s %d", pZapisi[i]->Ime, pZapisi[i]->Prezime, &pZapisi[i]->nomer);
    }
    printf("%s", "-----------------------------------------\n");
    podrediZapisi(pZapisi, golemina);

    //pecatime
    for ( i = 0; i<golemina; i++)
        printf("%s %s %d\n", pZapisi[i]->Ime, pZapisi[i]->Prezime, pZapisi[i]->nomer);

    system("PAUSE");
    return 0;
}
Еве тест. влезот е пред цртата, а излезот после.
Код:
Boris Petreski 4
Antonio Dimoski 2
Goran  Gjorevski 5
--------------------
Antonio Dimoski 2
Boris Petreski 4
Goran Gjorevski 5

фала :helou:
 
Да се најдат сите палиндроми кои се јавуваат како подзбор
во некој збор внесен преку тастатура.
Објаснување: Палиндром е збор кој се чита исто и одназад
нанапред, како и однапред наназад.

Ако знае некој нека ми помогне се убив од решавање и не е како што треба.
:nesum:
 
Да се најдат сите палиндроми кои се јавуваат како подзбор
во некој збор внесен преку тастатура.
Објаснување: Палиндром е збор кој се чита исто и одназад
нанапред, како и однапред наназад.

Ако знае некој нека ми помогне се убив од решавање и не е како што треба.
:nesum:

Ако добро разбирам што е подзбор тогаш:

Код:
string zbor, s1, s2;
    int i,y,z;
    cout << "Vnesi zbor: ";
    cin >> zbor;
    
    for(i=0;i<zbor.length();i++){
        for(y=3;y<=zbor.length()-i;y++){
            s1 = zbor.substr(i,y);
            s2 = "";
            for (z=s1.length();z>0; z--){
                s2 += s1[z-1];
            }            
            if (s1==s2)
                cout << "Podzborot " + s2 + " e palindrom\n";
        }
    }
 
Ако може помош за задачава во Ц++. Да тргнам, па натаму ќе се мачам.


Пресметка на поминато време меѓу два датуми

Да се напише програма во која се пресметува времето поминато помеѓу два внесени датуми.
Датумите да се внесуваат како броеви од облик dd.mm.gggg. Во програмата исто така, да се
врши проверка на коректноста на датумите, т.е да се пресметува дали внесен датум е коректен
според бројот на денови кои ги имаат месеците, вклучително, и престапните години (да се
овозможи за секоја престапна година да се земе во предвид дека 02 месец има 29 дена). Во
случај кога некој од датумите не е коректен, пресметката за време да не се извршува и да се
допушта корисникот повторно да направи внес.
Секаде каде е тоа можно, да се работата парцијалните програмски целини со функции.
Избери примери по следната шема:

Datum1: |коректен| некоректен |некоректен| |
Datum2: |коректен| коректен |некоректен| |
vreme: | | | | | |
br.ind: | | | | | |


П.С Како ке ја најдам дали годината е престапна или не е ?
 
Ако добро разбирам што е подзбор тогаш:

Код:
string zbor, s1, s2;
    int i,y,z;
    cout << "Vnesi zbor: ";
    cin >> zbor;
    
    for(i=0;i<zbor.length();i++){
        for(y=3;y<=zbor.length()-i;y++){
            s1 = zbor.substr(i,y);
            s2 = "";
            for (z=s1.length();z>0; z--){
                s2 += s1[z-1];
            }            
            if (s1==s2)
                cout << "Podzborot " + s2 + " e palindrom\n";
        }
    }

Фала ти многу pLaToOn, само мене ми трбаше програмата да е во С а не С++ ако може да ми кажиш како да го напишам во С for циклусот...
 
Фала ти многу pLaToOn, само мене ми трбаше програмата да е во С а не С++ ако може да ми кажиш како да го напишам во С for циклусот...

аххх, јас сум VB дете ... незнам ... зарем има разлика? :)
 
Сакам да почнам да ја учам основата на програмскиот јазик како и од кај да почнам совети??:toe:
 

Kajgana Shop

Back
На врв Bottom