В помощь студенту по С или C++

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by cheater_man, 15 Dec 2009.

  1. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    Примерно такую прогу обычно сдают студенты 2-го курса.В прогу входит открытие файла, записать в файл массива, чтение из файла в массив и сортировка массива методом перебора(Прога написанна на Turbo C++)
    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <iostream.h>
    #include <time.h>
    void write_file(FILE *f, char *file_name,int size);
    int main()
    {
    int a;
    FILE *f1;
    srand(time(NULL));
    char *file_name = "file_in.txt";
    char array[256];
    printf("Random massiv:\n");
    f1 =fopen(file_name,"wr");
        if(f1==NULL)
    	printf("Error open file");
    	else
    	{
    	  for(int i=0;i<256;i++)
    	  {
    	    a = rand() % 100;
    	    array[i] = a;
    	    if(i>0&&i<254)
    	    {
    	    fprintf(f1,"%d,",array[i]);
    	    printf("%d,",array[i]);
    	    }
    	    if(i==255)
    	    {
    	    fprintf(f1,"%d.",array[i]);
    	    printf("%d.",array[i]);
    	    }
    	  }
    	  fclose(f1);
    	}
    getch();
    write_file(f1,file_name,256);
    clrscr();
    return 0;
    }
    void write_file(FILE *f,char *file_name, int size)
    {
    FILE *file_out;
    file_out = fopen("file_out.txt","w");
    f = fopen(file_name,"r");
    int int_from_file,i=0;
    char c;
    char mass[256];
    while(fscanf(f,"%d %c",&int_from_file,c)!=EOF)
    { mass[i] = int_from_file;
      i++;
    }
    int min;
    int temp;
    for(int r=0;r<size-1;r++)
    {
     min = r;
      for(int j=r+1;j<size;j++)
      {
        if(mass[j]<mass[min])
        {
          min=j;
        }
      }
      temp = mass[r];
      mass[r] = mass[min];
      mass[min] = temp;
    }
    fclose(f);
    if(file_out==NULL)
        printf("Error open file");
     else
      printf("\nOtsortirovanii massiv\n");
       for(int d=0;d<size;d++)
        {
         if(d>0&&d<size)
          {
           fprintf(file_out,"%d,",mass[d]);
           printf("%d,",mass[d]);
          }
         if(d==size-1)
          {
           fprintf(file_out,"%d.",mass[d]);
           printf("%d.",mass[d]);
          }
        }
    fclose(file_out);
    getch();
    }
    
    Если кому что не понятно , пишите ответим :)
     
    #1 cheater_man, 15 Dec 2009
    Last edited: 17 Dec 2009
  2. ASQX

    ASQX Elder - Старейшина

    Joined:
    21 Jun 2008
    Messages:
    47
    Likes Received:
    16
    Reputations:
    1
    разве в С++ ф-ция main не должна возвращять int число?
     
  3. razb

    razb Active Member

    Joined:
    24 Mar 2009
    Messages:
    658
    Likes Received:
    133
    Reputations:
    18
    Вообще не могу понять зачем эта тема?
    Уже есть тема для помощи студентам с лабами, хватит засирать раздел!
     
  4. 0xF0RD

    0xF0RD Member

    Joined:
    2 Dec 2009
    Messages:
    49
    Likes Received:
    6
    Reputations:
    0
    Вообще, по правилам языка С++ , если функция main() имеет тип возвращаемого значения void, то она должна заканчиваться так exit (0), где 0-код возврата
     
  5. R1der23

    R1der23 New Member

    Joined:
    28 Jul 2008
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    вообще то по стандарту с++ функция main должна возвращать int ..
     
  6. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    Нет стандарта у main, и не обязательно она возвращать int.
    Например могу еще и вот так написать
    Code:
    void main(void)
    {
    ....
    }
    
    И это не будет считаться за ошибку, т.к main это главный поток программы и он должен быть не обязательно int :)
    А эта тема создана для студентов :D и всё на это :D
     
  7. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Есть.
    Только вот в нем написано should.
    Т.е. "рекомендуется", которое применено к компилеру.
     
  8. vdm

    vdm New Member

    Joined:
    16 Dec 2009
    Messages:
    3
    Likes Received:
    1
    Reputations:
    0
    По стандарту всё-таки int. Есть (плохие) компилеры, которые это глотают, но вообще это некорректно. Программа должна хоть что-то отдавать ОС, т.е. обычно 0 в случае отсутствия ошибки - это весьма удобно, так как exit code тоже можно обработать уже в самой ОС, например так:

    Code:
    ./proga
    if [ $? -ne 0 ]; then
      echo "Shit happens";
    fi
    
     
  9. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    Да всетаки соглашусь, что main должна быть int. Гуглил на счет main и в некоторых стaтьяx пишут:
    Code:
    viod main()
    {
    ...
    }
    
    Все таки это не правильно! Действительно правильней будет так:
    Code:
    int main()
    {
    ...
    return 0;
    }
    
    ->http://ru.wikipedia.org/wiki/C%2B%2B
     
  10. Fata1ex

    Fata1ex Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    отличная тема

    void main чем не угодил? "плохие компилеры глотают" оО в данном случае, имхо, никакой разницы, что возвращает main нет. да и тема не об этом. да и не там. :(
     
  11. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    Все таки мне кажется есть такой стандарт, что Main должна быть Int.
     
  12. Fata1ex

    Fata1ex Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    надеюсь предположения исчерпаны