Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
j.zejdl
Člen
Avatar
j.zejdl:13.1.2014 14:58

Čau, nechce se mi spustit program od kámoše. Ve škole děláme v Micr. Visual studiu.Přitom v code blocks to jede kámošovi. Neví někdo co s tím?

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

/*
1) Vytvořte tyto funkce:
  a) Funkce, která naplní pole sudými čísly
  b) Funkci, která rozdělí pole na 2 části a zamění je.
  Vstupními parametry bude identifikátor pole, číslo řádku, podle kterého se pole rozdělí.
  Výstupním parametrem bude int, nenulová hodnota bude značit příznak chyby
  (požadavek na prohození pole podle řádku mimo platný rozměr atd.). Operace ve funkci provádějte pomocí
  ukazatelů.
  c) Funkci, která uloží pole do souboru v textové formě
  d) Funkci, která načte toto pole z tohoto souboru
  e) Hlavní funkce (main) :
  · načte požadovaný rozměr a alokuje paměť podle tohoto požadavku.
  · Vypíše pole na obrazovku
  · Vytvoří a vypíše součet jednotlivých řádků
  · Uloží upravené pole do souboru na disketu
  · Načte toto pole a znovu jej vypíše
  · Před ukončením programu uvolní všechnu alokovanou paměť
  · Název souboru na disketě se zadává jako parametr při spouštění programu
*/
void sudaCisla (int *pole, int velikost);
int prohozeniPole(int *pole, int velikost,int pivot);
int poleDoSouboru(int *pole, int velikost,char *cesta);
int poleZeSouboru(int *pole, char *cesta,int size);
int main (int argc, char **argv)
{
        int *pole;
        int radek;
        int *rPole;
        char *pomPole=NULL;
        int velikost;
        int res,i,j;
        int sum=0;

        /*NACTENI POZADOVANEHO ROZMERU A ALOKACE PAMETI*/
        printf("Zadejte velikost pole:\n");
        res=scanf("%d",&velikost);
        if(res && velikost >0)
                pole=(int*)malloc(velikost*sizeof(*pole));
        else {
          printf("Zadali jste neplatny rozmer pole.\n");
          return 1;
        }
        /*NACTENI POZADOVANEHO ROZMERU A ALOKACE PAMETI*/

        sudaCisla(pole,velikost);


        printf("Zadejte cislo radku, podle ktereho chcete pole prohodit:\n");
        res=scanf("%d",&radek);
        if(res&&radek>0)
          res=prohozeniPole(pole,velikost,radek);
        else
          res=1;//nepovedlo se nacist spravne radek, podle ktereho se ma pole prohodit
        if(res)
          printf("Doslo k chybe pri prohazovani casti pole. Pole je navraceno v puvodnim tvaru.\n");

        /*VYPIS POLE*/
        for(i=0;i<velikost;i++)
        {
                printf("%d\n",pole[i]);
        }
        /*VYPIS POLE*/


        /*VYPIS SOUCTU POLE*/
        for(i=0;i<velikost;i++)
        {
                sum+=pole[i];
        }
        printf("Soucet pole je %d\n",sum);
        /*VYPIS SOUCTU POLE*/

        if(argc==2)
          res=poleDoSouboru(pole,velikost,argv[1]);//ULOZI POLE DO SOUBORU
        else
        {
          pomPole=(char*)malloc(180*sizeof(*pomPole));
          printf("Zadali jste spatne cestu, prosim zadejte, kam si prejete soubor ulozit:\n");
          scanf("%s",pomPole);
          res=poleDoSouboru(pole,velikost,pomPole);
        }

        if (res)
        {
           printf("Chyba pri zapisovani pole do souboru, zkontrolujte prosim zda mate prava zapisovat tam, kam jste zadali.");
           free(pole);//UVOLNENI PAMETI
           pole=NULL;//NASTAVENI UKAZATELE NA NULL ... KDYBY BYL PROBLEM VYHODI SEG. FAULT
           if(pomPole)
           {
             free(pomPole);
             pomPole=NULL;
           }
           return 1; //nema cenu dal nacitat nejake pole, ktere sme ani neulozili
        }

        free(pole);//UVOLNENI PAMETI
        pole=NULL;//NASTAVENI UKAZATELE NA NULL ... KDYBY BYL PROBLEM VYHODI SEG. FAULT

        /*lze pouzit samozrejme i malloc, ale zrovna v tomhle pripade mi prijde calloc vyhodnejsi, uz jenom proto,
         * ze pokud by nahodou doslo k prideleni stejneho kusu pameti, ktery byl puvodne, budou tam stejny data,
         * i kdyby doslo k chybe pri cteni pole, takhle tam budou puvodne nuly a je potreba je prepsat nactenymi hodnotami
         */
        rPole=(int*)calloc(velikost,sizeof(*rPole));
        if(pomPole==NULL)
          res=poleZeSouboru(rPole,argv[1],i);
        else
        {
          res=poleZeSouboru(rPole,pomPole,i);
          free(pomPole);
          pomPole=NULL;
        }

        if (res)//dost nepravdepodobne, ze by selhalo cteni, kdyz zapis projde, ale pro jistotu zkontrolujeme
        {
           printf("Chyba pri cteni pole ze souboru, zkontrolujte prosim zda mate prava cist z umisteni, kam jste pole ulozili.");
           free(rPole);//UVOLNENI PAMETI
           rPole=NULL;//NASTAVENI UKAZATELE NA NULL ... KDYBY BYL PROBLEM VYHODI SEG. FAULT
           return 1; //nema cenu vypisovat, kdyz mame chybu pri nacitani
        }

        for(j=0;j<i;j++)
        {
          printf("%d\n",rPole[j]);
        }
        free(rPole);
        rPole=NULL;

        /*NACTENI POLE ZE SOUBORU A JEHO VYPSANI*/
        return 0;
}

void sudaCisla (int *pole, int velikost)
{
        int i;
        for (i=0;i<velikost;i++)
        {
                pole[i]=2*(i+1); // nepredpokladam nulu jako sude cislo, jinak misto i+1 pouze i
        }
}

int prohozeniPole(int *pole, int velikost,int pivot)
{
        int *tmpPole;
        int i;
        int *pntr,*pntr2;
        if(pivot<velikost)
        {
          tmpPole=(int*)malloc(velikost*sizeof(*tmpPole));
          pntr=tmpPole;//nastaveni ukazatele pntr na zacatek pole tmpPole
          pntr2=pole+pivot;//nastaveni rovnou na hodnotu odkud se ma cist
          for(i=pivot;i<velikost;i++)
          {
              *pntr=*pntr2;
              pntr++;
              pntr2++;
          }
          pntr2=pole;//a nastaveni pntr2 na zacatek vstupniho pole, odkud nacteme jeste ten zacatek
          for(i=0;i<pivot;i++)
          {
              *pntr=*pntr2;
              pntr++;
              pntr2++;
          }
          for(i=0;i<velikost;i++)
          {
            pole[i]=tmpPole[i];
          }
          free(tmpPole);
          tmpPole=NULL;
          return 0;
        }
        return 1;
}

int poleDoSouboru(int *pole, int velikost,char *cesta)
{
  int i;
  FILE *f=fopen(cesta,"w");
  if(f==NULL)
    return 1;
  for(i=0;i<velikost;i++)
  {
    fprintf(f,"%d\n",pole[i]);
  }
  fclose(f);
  return 0;
}

int poleZeSouboru(int *pole, char *cesta,int size)
{
  int count=0;
  int a;

  FILE *f=fopen(cesta,"r");
  if(f==NULL)
    return 1;
  while((a=fscanf(f,"%d",&pole[count]))!=EOF)
  {
    count++;
    if(size==count)
      break; //zapise jen tolik kolik se vejde do zadaneho pole
    continue;
  }
  fclose(f);
  return 0;
}
 
Odpovědět
13.1.2014 14:58
Avatar
MrPabloz
Člen
Avatar
MrPabloz:13.1.2014 15:13

Co takhle napsat co se vypíše? nějaké chybové hlášení a tak?

Nahoru Odpovědět
13.1.2014 15:13
Harmonie těla a duše, to je to, oč se snažím! :)
Avatar
Odpovídá na j.zejdl
Libor Šimo (libcosenior):13.1.2014 15:20

Myslím, že vo VS musíš vvytvoriť nový projekt a tam to skopírovat.
Samotný file tam nespustíš, len projekt.

Editováno 13.1.2014 15:24
Nahoru Odpovědět
13.1.2014 15:20
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Adam "Nero" Chudomel:13.1.2014 15:22

ve Visual studiu by jsi měl mít "našeptávač" který nejen že radí při psaní kodu ale i ukazuje chyby, pak by určitě stálo za to zjistit jaké máte verze případně se pokusit přepsat chyby co Visual Studio ukazuje

Nahoru Odpovědět
13.1.2014 15:22
Nihil est, aut totum licet consistere
Avatar
Adam "Nero" Chudomel:13.1.2014 15:40

BTW. pokud ti poslal celý projekt tak by jsi tam měl mít složku "Debug" ve které je rovnou exe

Nahoru Odpovědět
13.1.2014 15:40
Nihil est, aut totum licet consistere
Avatar
j.zejdl
Člen
Avatar
j.zejdl:13.1.2014 16:05

Ono to právě neukazuje nic, nechce se to přeložit vůbec. Micr.Visual 2013.

 
Nahoru Odpovědět
13.1.2014 16:05
Avatar
Odpovídá na j.zejdl
Michal Žůrek - misaz:13.1.2014 16:16

A jakým způsobem to překládáš?

 
Nahoru Odpovědět
13.1.2014 16:16
Avatar
Odpovídá na j.zejdl
Libor Šimo (libcosenior):13.1.2014 16:49

Toto som našiel : http://www.youtube.com/watch?…
Vyskúľal som to a funguje to ako má. Len nedávaj nikde žiadny podtržník, ako je to tam. Proste len urob ukázané nastavenie a projekt spusti.

Nahoru Odpovědět
13.1.2014 16:49
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
j.zejdl
Člen
Avatar
j.zejdl:13.1.2014 16:51

Díky

 
Nahoru Odpovědět
13.1.2014 16:51
Avatar
Odpovídá na j.zejdl
Libor Šimo (libcosenior):13.1.2014 16:54

Ten podtržník som myslel v kóde, nie v nastavovaní, tam sú tiež podtržníky.
Vo VS som vytvoril empty project a doňho som dal ten kamošov súbor.

Nahoru Odpovědět
13.1.2014 16:54
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.