• اگر سمپادی هستی همین الان عضو شو :

    ثبت نام عضویت

مقدمات برنامه نویسی با ++C

  • شروع کننده موضوع شروع کننده موضوع hasangolab
  • تاریخ شروع تاریخ شروع
پاسخ : مقدمات برنامه نویسی با ++C

فرض کنیم یک متغیری از نوع صحیح داریم به اسم n. چطور می توان n امین کاراکتر یک رشته را چاپ کرد؟
 
پاسخ : مقدمات برنامه نویسی با ++C

کد:
#include<iostream>
#include<string>
using namespace std;
int main ()
{
	string s;
	int n;
	cin >> s;
	cin>>n;
	cout<<s[n-1]<<endl;
	return 0;
}

این ویژگی رشته مثل آرایه عه
حتما این رو نگاه کن
 
پاسخ : مقدمات برنامه نویسی با ++C

برنامه که دارم می نویسم قراره یک رشته بگیره. تعداد کاراکتر هایشو چاپ کنه و سپس برای اونایی که تعداد کاراکترهاشون فرد هستش، کاراکتر وسطیش رو چاپ کنه و برای اونایی که زوج هستش دو تا وسطی رو چاپ کنه. کسی میتونه بگه اشکال این برنامه چیه؟ خیلی روش فکر کردم اما نفهمیدم چرا اینجوریه
کد:
#include<iostream>
#include<string>
#include<conio.h>
using namespace std;

void odd(string str) //if the string length is odd 
{
 int j,square,n=str.size();
     
     if (n%2!=0)        //if n was odd
     {
         square = (n/2)+1; //finding the square number(middle one) that should be printed
     }
     
     for (j=0;j<=n;j++) /*breaking the string to characters */
     {
         if (square=j)
         {
          cout<<str[j]; //printing odd
          break;
         }
     }
     
}

void even(string str) 
{    
      int j,square1,square2,n=str.size();
      
     if (n%2==0) //if n is even
     { 
         square1 = (n/2); //first square that should be printed
         square2 = (n/2)+1; //second square that should be printed
     }
          
     for (j=0;j<=n;j++)
     {
        if (square1=j)
         {
          cout<<str[j]; //printing square1 square in string
         }
        if (square2=j)
        {
          cout<<str[j+1]; //printing square2 square in string/ 
          break;
        }   
     }

int main()
{
          
          int T;
          cin>>T;
          
          int n;
          string str;
          for (int i=0;i<T;i++)
          {
              cin>>str;
              n = str.size();
              cout<<n<<" ";
              
              if (n%2!=0)
              odd(str); 
              if (n%2==0)
              even(str);
              
              cout<<endl;
          }
          
          getch();
          return 0;
}
 
پاسخ : مقدمات برنامه نویسی با ++C

به نقل از Daneshvar :
برنامه که دارم می نویسم قراره یک رشته بگیره. تعداد کاراکتر هایشو چاپ کنه و سپس برای اونایی که تعداد کاراکترهاشون فرد هستش، کاراکتر وسطیش رو چاپ کنه و برای اونایی که زوج هستش دو تا وسطی رو چاپ کنه. کسی میتونه بگه اشکال این برنامه چیه؟ خیلی روش فکر کردم اما نفهمیدم چرا اینجوریه
کد:
#include<iostream>
#include<string>
#include<conio.h>
using namespace std;

void odd(string str) //if the string length is odd 
{
 int j,square,n=str.size();
     
     if (n%2!=0)        //if n was odd
     {
         square = (n/2)+1; //finding the square number(middle one) that should be printed
     }
     
     for (j=0;j<=n;j++) /*breaking the string to characters */
     {
         if (square=j)
         {
          cout<<str[j]; //printing odd
          break;
         }
     }
     
}

void even(string str) 
{    
      int j,square1,square2,n=str.size();
      
     if (n%2==0) //if n is even
     { 
         square1 = (n/2); //first square that should be printed
         square2 = (n/2)+1; //second square that should be printed
     }
          
     for (j=0;j<=n;j++)
     {
        if (square1=j)
         {
          cout<<str[j]; //printing square1 square in string
         }
        if (square2=j)
        {
          cout<<str[j+1]; //printing square2 square in string/ 
          break;
        }   
     }

int main()
{
          
          int T;
          cin>>T;
          
          int n;
          string str;
          for (int i=0;i<T;i++)
          {
              cin>>str;
              n = str.size();
              cout<<n<<" ";
              
              if (n%2!=0)
              odd(str); 
              if (n%2==0)
              even(str);
              
              cout<<endl;
          }
          
          getch();
          return 0;
}
تابع even یک آکولاد کمتر بسته شده!!!
یه آکولاد بالای اینت مین ببندید درست میشه.
کد تون تصحیح شد
کد:
#include<iostream>
#include<string.h>
#include<conio.h>
using namespace std;

void odd(string str) //if the string length is odd 
{
 int j,square,n=str.size();
     
     if (n%2!=0)        //if n was odd
     {
         square = (n/2)+1; //finding the square number(middle one) that should be printed
     }
     
     for (j=0;j<=n;j++) /*breaking the string to characters */
     {
         if (square=j)
         {
          cout<<str[j]; //printing odd
          break;
         }
     }
     
}

void even(string str) 
{    
      int j,square1,square2,n=str.size();
      
     if (n%2==0) //if n is even
     { 
         square1 = (n/2); //first square that should be printed
         square2 = (n/2)+1; //second square that should be printed
     }
          
     for (j=0;j<=n;j++)
     {
        if (square1=j)
         {
          cout<<str[j]; //printing square1 square in string
         }
        if (square2=j)
        {
          cout<<str[j+1]; //printing square2 square in string/ 
          break;
        }   
     }
     }

int main()
{
          
          int T;
          cin>>T;
          
          int n;
          string str;
          for (int i=0;i<T;i++)
          {
              cin>>str;
              n = str.size();
              cout<<n<<" ";
              
              if (n%2!=0)
              odd(str); 
              if (n%2==0)
              even(str);
              
              cout<<endl;
          }
          
          getch();
          return 0;
}
برنامتون باگ داره
برای تعداد کاراکتر یک جواب نمیده
و برای تعداد کاراکتر فرد وسطی رو نشون نمیده
یکی مونده به وسطی رو نشون میده!
میخواید درستش کنم؟!
تصحیح شده ی کل داستان:
کد:
#include<iostream>
#include<string.h>
#include<conio.h>
using namespace std;

void odd(string str) //if the string length is odd 
{
 int j,square,n=str.size();
     
     if (n%2!=0)        //if n was odd
     {
         square = (n/2)+1; //finding the square number(middle one) that should be printed
     }
     
     for (j=0;j<=n;j++) /*breaking the string to characters */
     {
         if (square=j)
         {
          cout<<str[j+1]; //printing odd
          break;
         }
     }
     
}

void even(string str) 
{    
      int j,square1,square2,n=str.size();
      
     if (n%2==0) //if n is even
     { 
         square1 = (n/2); //first square that should be printed
         square2 = (n/2)+1; //second square that should be printed
     }
          
     for (j=0;j<=n;j++)
     {
        if (square1=j)
         {
          cout<<str[j]; //printing square1 square in string
         }
        if (square2=j)
        {
          cout<<str[j+1]; //printing square2 square in string/ 
          break;
        }   
     }
     }

int main()
{
          
          int T;
          cin>>T;
          
          int n;
          string str;
          for (int i=0;i<T;i++)
          {
              cin>>str;
              n = str.size();
              cout<<n<<" ";
              
              if (n%2!=0)
              odd(str); 
              if (n%2==0)
              even(str);
              
              cout<<endl;
          }
          
          getch();
          return 0;
}
 
پاسخ : مقدمات برنامه نویسی با ++C

برادر کدنویس ، وقتی از شرط if استفاده می کنی ، a=x معنی نداره !! باید a==x رو استفاده کنی .
می دونم که خودتم اینو می دونی ولی اصلا دقت نکرده بودی روی این موضوع ، 3 جا a=x گذاشته بودی ، 3 جا a==x !!! تکلیف ما رو مشخص کن :-" ;D
 
پاسخ : مقدمات برنامه نویسی با ++C

به علاوه اینکه تو این تیکّه از برنامه :

کد:
    for (j=0;j<=n;j++)
     {
        if (square1=j)
         {
          cout<<str[j]; //printing square1 square in string
         }
        if (square2=j)
        {
          cout<<str[j+1]; //printing square2 square in string/ 
          break;
        }

cout<<str[j+1] نادرسته چون این j که الان برابر با square2 شده خود به خود یکی بیشتر از j قبلی ـه نیازی به +1 نداره. j+1 باید بشه j
بعد هم اینکه آرایه ها از 0 شروع میشن پس square1=(n/2)-1 و square2= n/2 . همینطور تو odd
این و == ها و دو پست قبل گفته شده هارو درست کنید ، درست میشه که در نهایت همون کد میشه :

کد:
#include<iostream>
#include<string.h>
#include<conio.h>
using namespace std;

void odd(string str) //if the string length is odd 
{
 int j,square,n=str.size();
     
     if (n%2!=0)        //if n was odd
     {
         square = (n/2); //finding the square number(middle one) that should be printed
     }
     
     for (j=0;j<=n;j++) /*breaking the string to characters */
     {
         if (square==j)
         {
          cout<<str[j]; //printing odd
          break;
         }
     }
     
}

void even(string str) 
{    
      int j,square1,square2,n=str.size();
      
     if (n%2==0) //if n is even
     { 
         square1 = (n/2)-1; //first square that should be printed
         square2 = (n/2); //second square that should be printed
     }
          
     for (j=0;j<=n;j++)
     {
        if (square1==j)
         {
          cout<<str[j]; //printing square1 square in string
         }
        if (square2==j)
        {
          cout<<str[j]; //printing square2 square in string/ 
          break;
        }   
     }
     }

int main()
{
          
          int T;
          cin>>T;
          
          int n;
          string str;
          for (int i=0;i<T;i++)
          {
              cin>>str;
              n = str.size();
              cout<<n<<" ";
              
              if (n%2!=0)
              odd(str); 
              if (n%2==0)
              even(str);
              
              cout<<endl;
          }
          
          getch();
          return 0;
}
 
پاسخ : مقدمات برنامه نویسی با ++C

کلا یه کم بد کد میزنید ! :)
ببخشید اینو میگم ولی به مسائل خیلی سخت نیگا میکنید !
الکی متغیر نگیرید برا راحتی کار ! ، هرچی با متغیر کمتر بزنید خیلی بهتره
اینم کد برنامه هستش !
کد:
// Ine the name of God

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <sstream>
#include <cmath>
#include <complex>
#include <cstdlib>
#include <cstring>
#include <string>
#include <stack>
#include <deque>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <iomanip>
#include <utility>

using namespace std;

#define foreach(i,c) (__typeof(c.begin()) i = c.begin(); i != c.end(); ++i)
#define FOR(i,a,b) for (int i=(a); i<(int)(b); ++i)
#define error(x) cerr << #x << " : " << x << endl
#define Size(a) ((int)a.size())
#define all(a) a.begin(), a.end()
#define pb push_back
#define mp make_pair
#define X first
#define Y second

typedef long long ll;
typedef pair<int, int> pii;

int main () {
	int T;
	for (cin >> T; T--;) {
		string s;
		cin >> s;
		if (Size(s) % 2 == 0)
			cout << s[Size(s)/2 - 1] << s[Size(s)/2] << endl;
		else
			cout << s[Size(s)/2] << endl;
	}
	return 0;
}
 
پاسخ : مقدمات برنامه نویسی با ++C

به نقل از Sajad Rahimi :
تابع even یک آکولاد کمتر بسته شده!!!
یه آکولاد بالای اینت مین ببندید درست میشه.
کد تون تصحیح شد
کد:
#include<iostream>
#include<string.h>
#include<conio.h>
using namespace std;

void odd(string str) //if the string length is odd 
{
 int j,square,n=str.size();
     
     if (n%2!=0)        //if n was odd
     {
         square = (n/2)+1; //finding the square number(middle one) that should be printed
     }
     
     for (j=0;j<=n;j++) /*breaking the string to characters */
     {
         if (square=j)
         {
          cout<<str[j]; //printing odd
          break;
         }
     }
     
}

void even(string str) 
{    
      int j,square1,square2,n=str.size();
      
     if (n%2==0) //if n is even
     { 
         square1 = (n/2); //first square that should be printed
         square2 = (n/2)+1; //second square that should be printed
     }
          
     for (j=0;j<=n;j++)
     {
        if (square1=j)
         {
          cout<<str[j]; //printing square1 square in string
         }
        if (square2=j)
        {
          cout<<str[j+1]; //printing square2 square in string/ 
          break;
        }   
     }
     }

int main()
{
          
          int T;
          cin>>T;
          
          int n;
          string str;
          for (int i=0;i<T;i++)
          {
              cin>>str;
              n = str.size();
              cout<<n<<" ";
              
              if (n%2!=0)
              odd(str); 
              if (n%2==0)
              even(str);
              
              cout<<endl;
          }
          
          getch();
          return 0;
}
برنامتون باگ داره
برای تعداد کاراکتر یک جواب نمیده
و برای تعداد کاراکتر فرد وسطی رو نشون نمیده
یکی مونده به وسطی رو نشون میده!
میخواید درستش کنم؟!
تصحیح شده ی کل داستان:
کد:
#include<iostream>
#include<string.h>
#include<conio.h>
using namespace std;

void odd(string str) //if the string length is odd 
{
 int j,square,n=str.size();
     
     if (n%2!=0)        //if n was odd
     {
         square = (n/2)+1; //finding the square number(middle one) that should be printed
     }
     
     for (j=0;j<=n;j++) /*breaking the string to characters */
     {
         if (square=j)
         {
          cout<<str[j+1]; //printing odd
          break;
         }
     }
     
}

void even(string str) 
{    
      int j,square1,square2,n=str.size();
      
     if (n%2==0) //if n is even
     { 
         square1 = (n/2); //first square that should be printed
         square2 = (n/2)+1; //second square that should be printed
     }
          
     for (j=0;j<=n;j++)
     {
        if (square1=j)
         {
          cout<<str[j]; //printing square1 square in string
         }
        if (square2=j)
        {
          cout<<str[j+1]; //printing square2 square in string/ 
          break;
        }   
     }
     }

int main()
{
          
          int T;
          cin>>T;
          
          int n;
          string str;
          for (int i=0;i<T;i++)
          {
              cin>>str;
              n = str.size();
              cout<<n<<" ";
              
              if (n%2!=0)
              odd(str); 
              if (n%2==0)
              even(str);
              
              cout<<endl;
          }
          
          getch();
          return 0;
}

آره. درست میگفتید. ولی چون فکر کنم کد نهاییتون به الگوریتم من شبیهه اشتباه کار میکنه. مثلا یه رشته 6 تایی بزنید ببینید تو خروجی چی میده
ولی باز هم راهنمایی هاتون ممنون
 
پاسخ : مقدمات برنامه نویسی با ++C

به نقل از Daneshvar :
آره قبول دارم. کدتون کامل درسته. فقط یه کم کتابخانه زیاد نداره؟ ولی جالب بود. فقط باید چاپ تعداد کاراکتر بهش اضافه بشه. در هر حال ممنون
این فایلی که من دارم از قبل آماده هستش ، به دلیل اینکه توی کانتست های مختلف وقت نیست که ببینی چه کتابخونه ای لازمت میشه و اینا ، همه چیزایی که معلمولن لازمم میشه رو include کردم + چیزایی که زیاد استفاده میکنم رو define کردم :)
شما هم یکم قوی شدی از این کارا باید بکنی !
ولی این کار یک امر سلیقه ای هست !
 
پاسخ : مقدمات برنامه نویسی با ++C

به نقل از vector :
این فایلی که من دارم از قبل آماده هستش ، به دلیل اینکه توی کانتست های مختلف وقت نیست که ببینی چه کتابخونه ای لازمت میشه و اینا ، همه چیزایی که معلمولن لازمم میشه رو include کردم + چیزایی که زیاد استفاده میکنم رو define کردم :)
شما هم یکم قوی شدی از این کارا باید بکنی !
ولی این کار یک امر سلیقه ای هست !

میشه بگید از کدوم define ها و include ها در این برنامه استفاده شده است؟
 
Back
بالا