Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2009, 20:52   #1
Serjuk
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 136
По умолчанию Динамические массивы и вывод массива из файла.

Здравствуйте,вообщем встала проблема использования динамической памяти выделяемой для массива и вывода этого массива из файла.Из файла нужно вывести 1 строку ( кол-во элементов содержащихся в массиве(n)) и 2 строку(собственно сам массив - который может быть 3 видов float,int,char)и после этого выделить под него динамическую память функцией malloc,если массив не задан,то ввод с экрана.После получения массива отсортировать эти элементы методом пузырька,собственно не совсем понимаю действие strcmp(которая должна сортировать 2 строки)
Прилагаю свой код:

Код:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc, char *argv[])
{
  FILE *fp;
  char ch;

  if(argc!=2) {
    printf("Вы забыли ввести имя файла.\n");
    exit(1);
  }

  if((fp=fopen(argv[1], "r"))==NULL) {
    printf("Ошибка при открытии файла.\n");
    exit(1);
  }
printf("ввод с клавиатуры\n");
char a[N][M];
    int n,i;
    scanf("%d",&n);
    a = (int*) malloc(sizeof(int)*n);

    for (i=0;i<n;i++)
       scanf("%s", &a[i]);
      for (i=0;i<n;i++)
      if((a[i] = malloc(sizeof(int)*n))==NULL) {
      printf("Ошибка при распределении  памяти\n");
      exit(1);  return a;
    }

    if (isalpha(a[0]){
   for (i=0;i<n;i++){
   for(j=0;j<n;j<n-i-1;j++){
       if(strcmp(a[j]>strcmp(a[j+1])){
             int tmp = strcmp(a[j]); strcmp(a[j]) = strcmp(a[j+1]) ; strcmp(a[j+1]) = tmp;
           }
        }
    }

    }
    for (i=0;i<n;i++)
       printf("%s",a[i],"\n");

    else{
    for(i = 0 ; i < n ; i++) {
       // сравниваем два соседних элемента.
       for(j = 0 ; j < n - i - 1 ; j++) {
           if(a[j] > a[j+1]) {
              // если они идут в неправильном порядке, то
              //  меняем их местами.
              int tmp = a[j]; a[j] = a[j+1] ; a[j+1] = tmp;
           }
        }
    }
    }
    for (i=0;i<n;i++)
       printf("%s",a[i],"\n");

free(a);
 getchar();
 getchar();
 }

 
  fclose(fp);
Прошу помощи)
Serjuk вне форума Ответить с цитированием
Старый 26.12.2009, 21:12   #2
RoS
Форумчанин
 
Аватар для RoS
 
Регистрация: 13.12.2009
Сообщений: 272
По умолчанию

Метод пузырька - он и есть метод пузырька, он неизменен, другое дело что тут строки и приходится делать strcmp вместо например > или < для обыкнвоенных чисел!
Суть в том, что по массиву пробегаешь много раз, и каждый раз проверяешь "больше" ли i-ая строка (i+1)-ой, если да, то меняешь местами через какой-то буффер промежуточный, как обыкновенные переменные
Если я помог вам - порадуйте меня, нажмите на весы слева
RoS вне форума Ответить с цитированием
Старый 26.12.2009, 21:42   #3
Serjuk
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 136
По умолчанию

ну я понимаю действие метода пузырька,просто я не знаю ,как правильно работать с вводом данных из файла и динамической памятью..Подскажите кто-нить как код подправить..Буду благодарен))
Serjuk вне форума Ответить с цитированием
Старый 26.12.2009, 22:10   #4
RoS
Форумчанин
 
Аватар для RoS
 
Регистрация: 13.12.2009
Сообщений: 272
По умолчанию

Если программа на С++ - пользуйся потоками для работы с файлами (мое ИМХО, ненадо холиваров ),т.е.
Код:

intlude <fstream>

istream file("some.txt"); //объект для ввода из файла some.txt
char c;
file >> c; // Вытащит первый символ из файла, при условии что данные 
//там в форматированном виде :)
Аналогично ostream - для вывода в файл объект
ну и тд, вобщем читай про потоки
Если я помог вам - порадуйте меня, нажмите на весы слева
RoS вне форума Ответить с цитированием
Старый 26.12.2009, 22:26   #5
Serjuk
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 136
По умолчанию

у меня название файла надо вводить самому и программа на си...
Serjuk вне форума Ответить с цитированием
Старый 26.12.2009, 22:39   #6
RoS
Форумчанин
 
Аватар для RoS
 
Регистрация: 13.12.2009
Сообщений: 272
По умолчанию

Цитата:
Сообщение от Serjuk Посмотреть сообщение
у меня название файла надо вводить самому и программа на си...
ааааа чот я вообще не в тему, прости друг
Если я помог вам - порадуйте меня, нажмите на весы слева
RoS вне форума Ответить с цитированием
Старый 27.12.2009, 10:16   #7
Serjuk
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 136
По умолчанию

Ребят помогите))
Serjuk вне форума Ответить с цитированием
Старый 28.12.2009, 15:26   #8
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Функция strcmp сравнивает строки по сумме кодов символов.
MaTBeu вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамические массивы Matr1x Общие вопросы C/C++ 5 07.12.2009 13:38
Динамические массивы С++ LoRD_ОЛЕДЖАН Помощь студентам 13 21.07.2009 15:16
динамические массивы в Си aka_faith Помощь студентам 1 24.05.2009 00:56
Динамические массивы на си Sha-sha Помощь студентам 1 19.05.2009 18:55
Циклическо сдвинуть элементы массива на K позиций влево, тоже сделать, испульзуя динамические массивы Fimogen Общие вопросы C/C++ 10 03.11.2007 11:19