Проблема. Помогите!

Тема в разделе "Общие вопросы по С и С++", создана пользователем arximed, 2 дек 2005.

Наш партнер Genesis Hackspace
Статус темы:
Закрыта.
  1. arximed

    arximed Гость

    Помогите решить задачку на С++... Я уже сижу два дня но ничего не выходит не хочит прога делать то что я ей говорю(или я неправильно говорю). Вот что надо сделать:
    Дано целочисельную прямоугольную матрицу:
    1)Сжать даную матрицу, удалив с нее строки и столбцы заполниные нулями;
    2)Найти номер первой из строк что имеет хоть одно плюсовое число

    Второе задание я сделал. А вот первое нивкакую не получается...
    Помогите!!! Подскажите где можно почитать какието книги для чайников по програмированию на С++?
    Большое всем спасиба!!! Извините за глупые вопросы...
     
  2. Anton Chik

    Anton Chik Гость

    без обид.ты нерусский или просто неграмотный?
    Код (Text):
    const int N=10;
    const int M=5;
    int a[N][M];
    int i,j,k,l;
    int nullstr;
    for(i=0;i<N;i++)// проверка строк
    {
    nullstr=1;
    for(j=0;j<M;j++)if(a[i][j]!=0){nullstr=0;break;}// ищем пустую строку
    if(nullstr)
     {
     //cдвиг строк вверх начиная с (i+1)-й
     for(k=i;k<N-1;k++)for(l=0;l<M;l++)a[k][l]=a[k+1][l];
     i--;
     }
    }

    for(i=0;i<M;i++)// проверка столбцов
    {
    nullstr=1;
    for(j=0;j<N;j++)if(a[j][i]!=0){nullstr=0;break;}// ищем пустой столбец
    if(nullstr)
     {
     //cдвиг столбцов влево начиная с (i+1)-го
     for(k=i;k<M-1;k++)for(l=0;l<N;l++)a[l][k]=a[l][k+1];
     j--;
     }
    }
    тип такого.сам не компилял, так что если будут косяки обращайся :D
     
  3. arximed

    arximed Гость

    Нет я с Украины... Разговариваю на украинском. Так что извините за ошибки... Большое спасиба щас буду садиться за задачу...
     
  4. arximed

    arximed Гость

    Может кому ни-ть еще пригодиться... Правда работает только когда заполнины нулями либо одна строка или столбец!!! Если 2 столб. или строки то прога просто виснит... Короче говоря немного глюков еще есть...
    Код (Text):
    #include <stdio.h>
    #include <iostream.h>
    #include <conio.h>
    #include <fstream.h>
    void main()
    {
    clrscr();
    const int N=3;
    const int M=4;
    int a[N][M];
    int i,j,k,l;
    int nullstr;

    for(i=0;i<N;i++) {
    for(j=0;j<M;j++) {
    cout<<"Vedit' element masuvy a["<<i<<"]["<<j<<"]=";
    cin>>a[i][j]; } cout<<"\n";
    }
    int zz=0,xx=0;

     int RR=0;
     for (i=0;i<N; i++)
     for (j=0; j<M; j++)
     if (a[i][j]>0) {RR=i; cout<<"\nNomer perhogo z rjadkiv z + el-tom="<<RR<<"\n"; goto ROBO;}


    ROBO: for(i=0;i<N;i++)// Perevirka rjadkiv
    {
    nullstr=1;
    for(j=0;j<M;j++)if(a[i][j]!=0){nullstr=0;break;}// Hykaem pystui rjadok
    if(nullstr)
    {
    //Zsyv rjadkiv yverx z (i+1)
    for(k=i;k<N-1;k++)for(l=0;l<M;l++)a[k][l]=a[k+1][l];
    i--;
    zz=zz++;
    }
    }

    for(i=0;i<M;i++)// Perevirka stovpciv
    {
    nullstr=1;
    for(j=0;j<N;j++)if(a[j][i]!=0){nullstr=0;break;}// Hykaem pystui stovbec`
    if(nullstr)
    {
    //Zsyv stovbciv vlivo z(i+1)
    for(k=i;k<M-1;k++)for(l=0;l<N;l++)a[l][k]=a[l][k+1];
    j--;
    xx=xx++;
    }
    }

    for(l=0;l<N-zz;l++) {
    for(k=0;k<M-xx;k++) {
    cout<<a[l][k];
        } cout<<"\n";
    }

    getch();
    }
    Большое СПАСИБА Anton Chik!!!!!!! :) ;) ;)
     
  5. Guest

    Guest Гость

    Замечание: Использование label в С и С++ считается дурным тоном...

    По поводу литературы - читай Кнута раздел вроде бы "разреженные массивы" или что-то типо того, поможет...

    Далее...
    По заданию - если тебе нужно по сжатой матрице определить номер первой ненулевой строки во входной матрице, то данный алгоритм тебе не подойдет...

    Иначе...
    По программе - попробуй так
    Код (Text):
    for(i=0;i<N;) // Perevirka rjadkiv
    {
    bool nullstr=1;

    for(j=0;j<M;j++) // Hykaem pystui rjadok
     if(a[i][j]!=0)
     {
      nullstr=0;
      i++;
      break;
     }

    if(nullstr) //Zsyv rjadkiv yverx z (i+1)
    {
     N--;

     for(k=i;k<N;k++)
      for(l=0;l<M;l++)
       a[k][l]=a[k+1][l];
    }
    }

    for(j=0;j<M;) // Perevirka stovpciv
    {
    bool nullst=1;

    for(i=0;i<N;i++) // Hykaem pystui stovbec`
     if(a[i][j]!=0)
     {
      nullstr=0;
      j++;
      break;
     }

    if(nullstr) //Zsyv stovbciv vlivo z (j+1)
    {
     M--;

      for(k=0;k<N;k++)
       for(l=j;l<M;l++)
        a[k][l]=a[k][l+1];
    }
    }

    for(i=0;i<N;i++)
    {
    for(j=0;j<M;j++)
     cout<<a[i][j];

    cout<<"\n";
    }

    getch();
    }
     
  6. arximed

    arximed Гость

    Привет!!! Большое спасиба за помощ!!!
    Вопрос: как это решить???
    Написать програму, которая считывает строку или текст (в обоих случаях длина строки не должна привышать 80 символов, между словами допускаються пробелы и комы, нажатие "Enter" - означает конец файлу) з текстового файла и высчитывает:
    а) сколько маленьких букв есть в этом тексте и заменить их на большие;
    б) слова которые не имеют какой то избраной Мной буквы;
    в) в другой текстовый файл выводит каждое слово текста с новой строки.
    Помогите пожалуйста бедному студенту у которого скоро сесия!!!
    Заранее благодарен и извините за беспокойство...

    Вот что я состряпал, но это немного не работает:
    Код (Text):
    #include<iostream.h>
    #include<string.h>
    #include<ctype.h>
    #include<conio.h>
    void main()
    { clrscr();
    const int n=80;
    char s[n];
    cout<<"Vvedit' rjadok sumvoliv\n";
    cin.getline(s,n);
    int str=strlen(s);
    int k=0;
    char s1[n],s2[n];
    int j=0;
     for(int i=0;i<str;i++)
     { if (islower(s[i])!=0) k++;

      s2[j++]=toupper(s[i]) ;}
       cout<<"Kil'kist' MALUX y teksti="<<k;
     


      char zz=0;
      cout<<"\nVvedu vubrany bykvy "; cin>>zz;



    {
    char w[25]; //Slovo
    char mas[10][25];//masuv;
    int k=0,t=0,i,j;
    while(t<str)
    {
    for(j=0,i=t;s[i]!=' ';i++,j++)w[j]=s[i];//Formyem slovo do probila
    w[j]='/0';//formyem kinec rjadka
    strcpy(mas[k],w);//kopiyem slovo v masuv
    k++;//zbilhyem het4ik sliv
    t=i+1;//perexodum do nastypnogo slova v rjad.
    }
    strcpy(s,"");//o4uhaem vuxidnui rjadok
    for(t=0;t<k;t++)
    if(mas[t][0]<'0'&&mas[t][0]>'9')//jakho perhui sumvol ne cufra
    {strcat(s,mas[t]);//kopiyem v rjadok slovo
    strcat(s,' ');//kopiyem v rjadok probil
    }
    puts(str);//vuvodum rezyltat
    }





    cout<<"\n\nZapus 4usel propusom:";
    cout<<"\n"<<s2;
    getch();
    }
    Подскажите где у меня ошибки а то у меня не выходит их исправить...
     
  7. Guest

    Guest Гость

    Код (Text):
    void main()
    {
    clrscr();
    const int n=80;
    char s[n];

    cout<<"Vvedit' rjadok sumvoliv\n";
    cin>>s;
    int len=strlen(s);
    Вроде же тебе надо строку из файла читать??? Ну, да ладно...
    Название переменной str обычно дается строковой переменной, кстати в конце твоего кода она так и используется :unsure:...

    Код (Text):
     {
     int k=0;
     for(int i=0;i<len;i++)
      if (islower(s[i]))
      {
       k++;
       s[i]=toupper(s[i]);
      }
     
     cout<<"\n\nKil'kist' MALUX y teksti="<<k;
     
     cout<<"\n\nZapus teksty propusom:\n"<<s;
    }
    Совсем не понятно зачем тебе были нужны j, s1 и s2...
    Хорошим тоном считается выполнять операции(функции) тогда, когда это требуется, т.е. менять на верхний регистор только маленькие буквы...

    Кстати, программа явно решает не твою задачу ;)...
    Код (Text):
     {
     char zz;
     cout<<"\n\nVvedu vubrany bykvy ";
     cin>>zz;
     zz=toupper(zz);

     bool fzz=0;
     int k=0;
     for(int i=0;i<len;i++)
     {
      if(s[i]==zz)
       fzz=1;
      if((s[i]==' ') || (s[i]==','))
      {
       s[i]='\n';
       if(fzz)
        k++;
      }
     }

     cout<<"\n\nKil'kist' SLOV kotorye ne imeut \'"<<zz<<"\' y teksti="<<k;

     cout<<"\n\nVuxidnui rjadok:\n"<<s;
     cout<<s;
    }
    Ну, если тебе надо выводить слова, в которых нет буквы, которую ту ввел, алгоритм чуть поменяется...

    Код (Text):
     getch();
    }
    Конец...
     
  8. Guest

    Guest Гость

    Код (Text):
    void main()
    {
    clrscr();
    const int n=80;
    char s[n];

    cout<<"Vvedit' rjadok sumvoliv\n";
    cin>>s;
    int len=strlen(s);
    Вроде же тебе надо строку из файла читать??? Ну, да ладно...
    Название переменной str обычно дается строковой переменной, кстати в конце твоего кода она так и используется :unsure:...

    Код (Text):
     {
     int k=0;
     for(int i=0;i<len;i++)
      if (islower(s[i]))
      {
       k++;
       s[i]=toupper(s[i]);
      }
     
     cout<<"\n\nKil'kist' MALUX y teksti="<<k;
     
     cout<<"\n\nZapus teksty propusom:\n"<<s;
    }
    Совсем не понятно зачем тебе были нужны j, s1 и s2...
    Хорошим тоном считается выполнять операции(функции) тогда, когда это требуется, т.е. менять на верхний регистор только маленькие буквы...

    Кстати, программа явно решает не твою задачу ;)...
    Код (Text):
     {
     char zz;
     cout<<"\n\nVvedu vubrany bykvy ";
     cin>>zz;
     zz=toupper(zz);

     bool fzz=0;
     int k=0;
     for(int i=0;i<len;i++)
     {
      if(s[i]==zz)
       fzz=1;
      if((s[i]==' ') || (s[i]==','))
      {
       s[i]='\n';
       if(fzz)
        k++;
      }
     }

     cout<<"\n\nKil'kist' SLOV kotorye ne imeut \'"<<zz<<"\' y teksti="<<k;

     cout<<"\n\nVuxidnui rjadok:\n"<<s;
     cout<<s;
    }
    Ну, если тебе надо выводить слова, в которых нет буквы, которую ту ввел, алгоритм чуть поменяется...

    Код (Text):
     getch();
    }
    Конец...
     
  9. Guest

    Guest Гость

    Упс... Извините за тафталогию... :unsure:
     
  10. arximed

    arximed Гость

    Кому не лень помогите! Хоть пару строчек я до конца сам состряпаю... Времени осталось мало а зще надо много чего написать...
    Описати структуру з іменем Zodiak, яка б містила наступні поля:
    - Прізвище і ім’я;
    - Знак Зодіаку;
    - Дата народження (масив з трьох чисел).
    Написати програму, яка б виконувала наступні дії:
    - введення з клавіатури даних в масив, що складається з восьми елементів типу Zodiak (3 бали);
    - впорядкування записів у масиві за зростанням року народження (+1 бал).
    - виведення на екран інформації про людину, прізвище якої вводиться з клавіатури. Якщо такої немає – вивести відповідне повідомлення (+1 бал).

    Зарание благодарен... Не переводил на русский...
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей