Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема. Помогите!
Форум программистов > Системное программирование > C, С++ и С Builder > Общие вопросы по С и С++
arximed
Помогите решить задачку на С++... Я уже сижу два дня но ничего не выходит не хочит прога делать то что я ей говорю(или я неправильно говорю). Вот что надо сделать:
Дано целочисельную прямоугольную матрицу:
1)Сжать даную матрицу, удалив с нее строки и столбцы заполниные нулями;
2)Найти номер первой из строк что имеет хоть одно плюсовое число

Второе задание я сделал. А вот первое нивкакую не получается...
Помогите!!! Подскажите где можно почитать какието книги для чайников по програмированию на С++?
Большое всем спасиба!!! Извините за глупые вопросы...
Anton Chik
без обид.ты нерусский или просто неграмотный?
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--;
 }
}


тип такого.сам не компилял, так что если будут косяки обращайся smile.gif
arximed
Нет я с Украины... Разговариваю на украинском. Так что извините за ошибки... Большое спасиба щас буду садиться за задачу...
arximed
Может кому ни-ть еще пригодиться... Правда работает только когда заполнины нулями либо одна строка или столбец!!! Если 2 столб. или строки то прога просто виснит... Короче говоря немного глюков еще есть...
#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!!!!!!! smile.gif smile.gif smile.gif
Guest
Замечание: Использование label в С и С++ считается дурным тоном...

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

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

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

Вот что я состряпал, но это немного не работает:
#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();
 }

Подскажите где у меня ошибки а то у меня не выходит их исправить...
Guest
void main()
{
 clrscr();
 const int n=80;
 char s[n];

 cout<<"Vvedit' rjadok sumvoliv\n";
 cin>>s;
 int len=strlen(s);

Вроде же тебе надо строку из файла читать??? Ну, да ладно...
Название переменной str обычно дается строковой переменной, кстати в конце твоего кода она так и используется biggrin.gif...

  {
   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...
Хорошим тоном считается выполнять операции(функции) тогда, когда это требуется, т.е. менять на верхний регистор только маленькие буквы...

Кстати, программа явно решает не твою задачу wink.gif...
  {
   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;
 }

Ну, если тебе надо выводить слова, в которых нет буквы, которую ту ввел, алгоритм чуть поменяется...

  getch();
}

Конец...
Guest
void main()
{
 clrscr();
 const int n=80;
 char s[n];

 cout<<"Vvedit' rjadok sumvoliv\n";
 cin>>s;
 int len=strlen(s);

Вроде же тебе надо строку из файла читать??? Ну, да ладно...
Название переменной str обычно дается строковой переменной, кстати в конце твоего кода она так и используется biggrin.gif...

  {
   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...
Хорошим тоном считается выполнять операции(функции) тогда, когда это требуется, т.е. менять на верхний регистор только маленькие буквы...

Кстати, программа явно решает не твою задачу wink.gif...
  {
   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;
 }

Ну, если тебе надо выводить слова, в которых нет буквы, которую ту ввел, алгоритм чуть поменяется...

  getch();
}

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

Зарание благодарен... Не переводил на русский...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2008 IPS, Inc.